Lines Matching refs:atusb
45 struct atusb { struct
83 static int atusb_control_msg(struct atusb *atusb, unsigned int pipe, in atusb_control_msg() argument
88 struct usb_device *usb_dev = atusb->usb_dev; in atusb_control_msg()
91 if (atusb->err) in atusb_control_msg()
92 return atusb->err; in atusb_control_msg()
99 atusb->err = ret; in atusb_control_msg()
107 static int atusb_command(struct atusb *atusb, u8 cmd, u8 arg) in atusb_command() argument
109 struct usb_device *usb_dev = atusb->usb_dev; in atusb_command()
112 return atusb_control_msg(atusb, usb_sndctrlpipe(usb_dev, 0), in atusb_command()
116 static int atusb_write_reg(struct atusb *atusb, u8 reg, u8 value) in atusb_write_reg() argument
118 struct usb_device *usb_dev = atusb->usb_dev; in atusb_write_reg()
121 return atusb_control_msg(atusb, usb_sndctrlpipe(usb_dev, 0), in atusb_write_reg()
126 static int atusb_read_reg(struct atusb *atusb, u8 reg) in atusb_read_reg() argument
128 struct usb_device *usb_dev = atusb->usb_dev; in atusb_read_reg()
138 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), in atusb_read_reg()
152 static int atusb_write_subreg(struct atusb *atusb, u8 reg, u8 mask, in atusb_write_subreg() argument
155 struct usb_device *usb_dev = atusb->usb_dev; in atusb_write_subreg()
161 orig = atusb_read_reg(atusb, reg); in atusb_write_subreg()
170 ret = atusb_write_reg(atusb, reg, tmp); in atusb_write_subreg()
175 static int atusb_read_subreg(struct atusb *lp, in atusb_read_subreg()
187 static int atusb_get_and_clear_error(struct atusb *atusb) in atusb_get_and_clear_error() argument
189 int err = atusb->err; in atusb_get_and_clear_error()
191 atusb->err = 0; in atusb_get_and_clear_error()
200 #define SKB_ATUSB(skb) (*(struct atusb **)(skb)->cb)
204 static int atusb_submit_rx_urb(struct atusb *atusb, struct urb *urb) in atusb_submit_rx_urb() argument
206 struct usb_device *usb_dev = atusb->usb_dev; in atusb_submit_rx_urb()
218 SKB_ATUSB(skb) = atusb; in atusb_submit_rx_urb()
223 usb_anchor_urb(urb, &atusb->rx_urbs); in atusb_submit_rx_urb()
236 struct atusb *atusb = in atusb_work_urbs() local
237 container_of(to_delayed_work(work), struct atusb, work); in atusb_work_urbs()
238 struct usb_device *usb_dev = atusb->usb_dev; in atusb_work_urbs()
242 if (atusb->shutdown) in atusb_work_urbs()
246 urb = usb_get_from_anchor(&atusb->idle_urbs); in atusb_work_urbs()
249 ret = atusb_submit_rx_urb(atusb, urb); in atusb_work_urbs()
252 usb_anchor_urb(urb, &atusb->idle_urbs); in atusb_work_urbs()
255 schedule_delayed_work(&atusb->work, in atusb_work_urbs()
261 static void atusb_tx_done(struct atusb *atusb, u8 seq) in atusb_tx_done() argument
263 struct usb_device *usb_dev = atusb->usb_dev; in atusb_tx_done()
264 u8 expect = atusb->tx_ack_seq; in atusb_tx_done()
269 ieee802154_xmit_complete(atusb->hw, atusb->tx_skb, false); in atusb_tx_done()
276 ieee802154_wake_queue(atusb->hw); in atusb_tx_done()
277 if (atusb->tx_skb) in atusb_tx_done()
278 dev_kfree_skb_irq(atusb->tx_skb); in atusb_tx_done()
286 struct atusb *atusb = SKB_ATUSB(skb); in atusb_in_good() local
297 atusb_tx_done(atusb, len); in atusb_in_good()
316 ieee802154_rx_irqsafe(atusb->hw, skb, lqi); in atusb_in_good()
324 struct atusb *atusb = SKB_ATUSB(skb); in atusb_in() local
339 usb_anchor_urb(urb, &atusb->idle_urbs); in atusb_in()
340 if (!atusb->shutdown) in atusb_in()
341 schedule_delayed_work(&atusb->work, 0); in atusb_in()
346 static void atusb_free_urbs(struct atusb *atusb) in atusb_free_urbs() argument
351 urb = usb_get_from_anchor(&atusb->idle_urbs); in atusb_free_urbs()
359 static int atusb_alloc_urbs(struct atusb *atusb, int n) in atusb_alloc_urbs() argument
366 atusb_free_urbs(atusb); in atusb_alloc_urbs()
369 usb_anchor_urb(urb, &atusb->idle_urbs); in atusb_alloc_urbs()
385 struct atusb *atusb = hw->priv; in atusb_xmit() local
386 struct usb_device *usb_dev = atusb->usb_dev; in atusb_xmit()
390 atusb->tx_skb = skb; in atusb_xmit()
391 atusb->tx_ack_seq++; in atusb_xmit()
392 atusb->tx_dr.wIndex = cpu_to_le16(atusb->tx_ack_seq); in atusb_xmit()
393 atusb->tx_dr.wLength = cpu_to_le16(skb->len); in atusb_xmit()
395 usb_fill_control_urb(atusb->tx_urb, usb_dev, in atusb_xmit()
397 (unsigned char *)&atusb->tx_dr, skb->data, in atusb_xmit()
399 ret = usb_submit_urb(atusb->tx_urb, GFP_ATOMIC); in atusb_xmit()
415 struct atusb *atusb = hw->priv; in atusb_set_hw_addr_filt() local
416 struct device *dev = &atusb->usb_dev->dev; in atusb_set_hw_addr_filt()
422 atusb_write_reg(atusb, RG_SHORT_ADDR_0, addr); in atusb_set_hw_addr_filt()
423 atusb_write_reg(atusb, RG_SHORT_ADDR_1, addr >> 8); in atusb_set_hw_addr_filt()
430 atusb_write_reg(atusb, RG_PAN_ID_0, pan); in atusb_set_hw_addr_filt()
431 atusb_write_reg(atusb, RG_PAN_ID_1, pan >> 8); in atusb_set_hw_addr_filt()
440 atusb_write_reg(atusb, RG_IEEE_ADDR_0 + i, addr[i]); in atusb_set_hw_addr_filt()
446 atusb_write_subreg(atusb, SR_AACK_I_AM_COORD, 1); in atusb_set_hw_addr_filt()
448 atusb_write_subreg(atusb, SR_AACK_I_AM_COORD, 0); in atusb_set_hw_addr_filt()
451 return atusb_get_and_clear_error(atusb); in atusb_set_hw_addr_filt()
456 struct atusb *atusb = hw->priv; in atusb_start() local
457 struct usb_device *usb_dev = atusb->usb_dev; in atusb_start()
461 schedule_delayed_work(&atusb->work, 0); in atusb_start()
462 atusb_command(atusb, ATUSB_RX_MODE, 1); in atusb_start()
463 ret = atusb_get_and_clear_error(atusb); in atusb_start()
465 usb_kill_anchored_urbs(&atusb->idle_urbs); in atusb_start()
471 struct atusb *atusb = hw->priv; in atusb_stop() local
472 struct usb_device *usb_dev = atusb->usb_dev; in atusb_stop()
475 usb_kill_anchored_urbs(&atusb->idle_urbs); in atusb_stop()
476 atusb_command(atusb, ATUSB_RX_MODE, 0); in atusb_stop()
477 atusb_get_and_clear_error(atusb); in atusb_stop()
489 struct atusb *atusb = hw->priv; in atusb_txpower() local
491 if (atusb->data) in atusb_txpower()
492 return atusb->data->set_txpower(hw, mbm); in atusb_txpower()
500 struct atusb *atusb = hw->priv; in atusb_set_txpower() local
505 return atusb_write_subreg(atusb, SR_TX_PWR_23X, i); in atusb_set_txpower()
551 struct atusb *atusb = hw->priv; in atusb_set_cca_mode() local
578 return atusb_write_subreg(atusb, SR_CCA_MODE, val); in atusb_set_cca_mode()
581 static int hulusb_set_cca_ed_level(struct atusb *lp, int rssi_base_val) in hulusb_set_cca_ed_level()
608 struct atusb *atusb = hw->priv; in atusb_set_cca_ed_level() local
613 return atusb_write_subreg(atusb, SR_CCA_ED_THRES, i); in atusb_set_cca_ed_level()
621 struct atusb *atusb = hw->priv; in atusb_channel() local
624 if (atusb->data) { in atusb_channel()
625 ret = atusb->data->set_channel(hw, page, channel); in atusb_channel()
627 msleep(atusb->data->t_channel_switch); in atusb_channel()
635 struct atusb *atusb = hw->priv; in atusb_set_channel() local
638 ret = atusb_write_subreg(atusb, SR_CHANNEL, channel); in atusb_set_channel()
649 struct atusb *lp = hw->priv; in hulusb_set_channel()
708 struct atusb *atusb = hw->priv; in atusb_set_csma_params() local
711 ret = atusb_write_subreg(atusb, SR_MIN_BE, min_be); in atusb_set_csma_params()
715 ret = atusb_write_subreg(atusb, SR_MAX_BE, max_be); in atusb_set_csma_params()
719 return atusb_write_subreg(atusb, SR_MAX_CSMA_RETRIES, retries); in atusb_set_csma_params()
725 struct atusb *atusb = hw->priv; in hulusb_set_lbt() local
727 return atusb_write_subreg(atusb, SR_CSMA_LBT_MODE, on); in hulusb_set_lbt()
733 struct atusb *atusb = hw->priv; in atusb_set_frame_retries() local
735 return atusb_write_subreg(atusb, SR_MAX_FRAME_RETRIES, retries); in atusb_set_frame_retries()
741 struct atusb *atusb = hw->priv; in atusb_set_promiscuous_mode() local
745 ret = atusb_write_subreg(atusb, SR_AACK_DIS_ACK, 1); in atusb_set_promiscuous_mode()
749 ret = atusb_write_subreg(atusb, SR_AACK_PROM_MODE, 1); in atusb_set_promiscuous_mode()
753 ret = atusb_write_subreg(atusb, SR_AACK_PROM_MODE, 0); in atusb_set_promiscuous_mode()
757 ret = atusb_write_subreg(atusb, SR_AACK_DIS_ACK, 0); in atusb_set_promiscuous_mode()
798 static int atusb_get_and_show_revision(struct atusb *atusb) in atusb_get_and_show_revision() argument
800 struct usb_device *usb_dev = atusb->usb_dev; in atusb_get_and_show_revision()
810 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), in atusb_get_and_show_revision()
814 atusb->fw_ver_maj = buffer[0]; in atusb_get_and_show_revision()
815 atusb->fw_ver_min = buffer[1]; in atusb_get_and_show_revision()
816 atusb->fw_hw_type = buffer[2]; in atusb_get_and_show_revision()
818 switch (atusb->fw_hw_type) { in atusb_get_and_show_revision()
823 atusb->data = &atusb_chip_data; in atusb_get_and_show_revision()
827 atusb->data = &atusb_chip_data; in atusb_get_and_show_revision()
831 atusb->data = &hulusb_chip_data; in atusb_get_and_show_revision()
835 atusb->err = -ENOTSUPP; in atusb_get_and_show_revision()
842 atusb->fw_ver_maj, atusb->fw_ver_min, hw_name, in atusb_get_and_show_revision()
843 atusb->fw_hw_type); in atusb_get_and_show_revision()
845 if (atusb->fw_ver_maj == 0 && atusb->fw_ver_min < 2) { in atusb_get_and_show_revision()
848 atusb->fw_ver_maj, atusb->fw_ver_min); in atusb_get_and_show_revision()
856 static int atusb_get_and_show_build(struct atusb *atusb) in atusb_get_and_show_build() argument
858 struct usb_device *usb_dev = atusb->usb_dev; in atusb_get_and_show_build()
867 ret = usb_control_msg(atusb->usb_dev, usb_rcvctrlpipe(usb_dev, 0), ATUSB_BUILD, in atusb_get_and_show_build()
878 static int atusb_get_and_conf_chip(struct atusb *atusb) in atusb_get_and_conf_chip() argument
880 struct usb_device *usb_dev = atusb->usb_dev; in atusb_get_and_conf_chip()
883 struct ieee802154_hw *hw = atusb->hw; in atusb_get_and_conf_chip()
885 man_id_0 = atusb_read_reg(atusb, RG_MAN_ID_0); in atusb_get_and_conf_chip()
886 man_id_1 = atusb_read_reg(atusb, RG_MAN_ID_1); in atusb_get_and_conf_chip()
887 part_num = atusb_read_reg(atusb, RG_PART_NUM); in atusb_get_and_conf_chip()
888 version_num = atusb_read_reg(atusb, RG_VERSION_NUM); in atusb_get_and_conf_chip()
890 if (atusb->err) in atusb_get_and_conf_chip()
891 return atusb->err; in atusb_get_and_conf_chip()
919 atusb->hw->phy->supported.channels[0] = 0x7FFF800; in atusb_get_and_conf_chip()
920 atusb->hw->phy->current_channel = 11; /* reset default */ in atusb_get_and_conf_chip()
921 atusb->hw->phy->symbol_duration = 16; in atusb_get_and_conf_chip()
922 atusb->hw->phy->supported.tx_powers = atusb_powers; in atusb_get_and_conf_chip()
923 atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers); in atusb_get_and_conf_chip()
929 atusb->hw->phy->supported.channels[0] = 0x7FFF800; in atusb_get_and_conf_chip()
930 atusb->hw->phy->current_channel = 11; /* reset default */ in atusb_get_and_conf_chip()
931 atusb->hw->phy->symbol_duration = 16; in atusb_get_and_conf_chip()
932 atusb->hw->phy->supported.tx_powers = atusb_powers; in atusb_get_and_conf_chip()
933 atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers); in atusb_get_and_conf_chip()
939 atusb->hw->flags |= IEEE802154_HW_LBT; in atusb_get_and_conf_chip()
940 atusb->hw->phy->supported.channels[0] = 0x00007FF; in atusb_get_and_conf_chip()
941 atusb->hw->phy->supported.channels[2] = 0x00007FF; in atusb_get_and_conf_chip()
942 atusb->hw->phy->current_channel = 5; in atusb_get_and_conf_chip()
943 atusb->hw->phy->symbol_duration = 25; in atusb_get_and_conf_chip()
944 atusb->hw->phy->supported.lbt = NL802154_SUPPORTED_BOOL_BOTH; in atusb_get_and_conf_chip()
945 atusb->hw->phy->supported.tx_powers = at86rf212_powers; in atusb_get_and_conf_chip()
946 atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers); in atusb_get_and_conf_chip()
947 atusb->hw->phy->supported.cca_ed_levels = at86rf212_ed_levels_100; in atusb_get_and_conf_chip()
948 atusb->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf212_ed_levels_100); in atusb_get_and_conf_chip()
965 atusb->err = -ENODEV; in atusb_get_and_conf_chip()
969 static int atusb_set_extended_addr(struct atusb *atusb) in atusb_set_extended_addr() argument
971 struct usb_device *usb_dev = atusb->usb_dev; in atusb_set_extended_addr()
980 if (atusb->fw_ver_maj == 0 && atusb->fw_ver_min < 3) { in atusb_set_extended_addr()
981 ieee802154_random_extended_addr(&atusb->hw->phy->perm_extended_addr); in atusb_set_extended_addr()
990 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), in atusb_set_extended_addr()
995 ieee802154_random_extended_addr(&atusb->hw->phy->perm_extended_addr); in atusb_set_extended_addr()
1004 ieee802154_random_extended_addr(&atusb->hw->phy->perm_extended_addr); in atusb_set_extended_addr()
1006 atusb->hw->phy->perm_extended_addr = extended_addr; in atusb_set_extended_addr()
1007 addr = swab64((__force u64)atusb->hw->phy->perm_extended_addr); in atusb_set_extended_addr()
1023 struct atusb *atusb = NULL; in atusb_probe() local
1026 hw = ieee802154_alloc_hw(sizeof(struct atusb), &atusb_ops); in atusb_probe()
1030 atusb = hw->priv; in atusb_probe()
1031 atusb->hw = hw; in atusb_probe()
1032 atusb->usb_dev = usb_get_dev(usb_dev); in atusb_probe()
1033 usb_set_intfdata(interface, atusb); in atusb_probe()
1035 atusb->shutdown = 0; in atusb_probe()
1036 atusb->err = 0; in atusb_probe()
1037 INIT_DELAYED_WORK(&atusb->work, atusb_work_urbs); in atusb_probe()
1038 init_usb_anchor(&atusb->idle_urbs); in atusb_probe()
1039 init_usb_anchor(&atusb->rx_urbs); in atusb_probe()
1041 if (atusb_alloc_urbs(atusb, ATUSB_NUM_RX_URBS)) in atusb_probe()
1044 atusb->tx_dr.bRequestType = ATUSB_REQ_TO_DEV; in atusb_probe()
1045 atusb->tx_dr.bRequest = ATUSB_TX; in atusb_probe()
1046 atusb->tx_dr.wValue = cpu_to_le16(0); in atusb_probe()
1048 atusb->tx_urb = usb_alloc_urb(0, GFP_KERNEL); in atusb_probe()
1049 if (!atusb->tx_urb) in atusb_probe()
1054 atusb_command(atusb, ATUSB_RF_RESET, 0); in atusb_probe()
1055 atusb_get_and_conf_chip(atusb); in atusb_probe()
1056 atusb_get_and_show_revision(atusb); in atusb_probe()
1057 atusb_get_and_show_build(atusb); in atusb_probe()
1058 atusb_set_extended_addr(atusb); in atusb_probe()
1060 if ((atusb->fw_ver_maj == 0 && atusb->fw_ver_min >= 3) || atusb->fw_ver_maj > 0) in atusb_probe()
1063 ret = atusb_get_and_clear_error(atusb); in atusb_probe()
1065 dev_err(&atusb->usb_dev->dev, in atusb_probe()
1079 atusb_write_reg(atusb, RG_TRX_STATE, STATE_FORCE_TRX_OFF); in atusb_probe()
1105 atusb_write_subreg(atusb, SR_RX_SAFE_MODE, 1); in atusb_probe()
1107 atusb_write_reg(atusb, RG_IRQ_MASK, 0xff); in atusb_probe()
1109 ret = atusb_get_and_clear_error(atusb); in atusb_probe()
1113 dev_err(&atusb->usb_dev->dev, in atusb_probe()
1119 atusb_free_urbs(atusb); in atusb_probe()
1120 usb_kill_urb(atusb->tx_urb); in atusb_probe()
1121 usb_free_urb(atusb->tx_urb); in atusb_probe()
1129 struct atusb *atusb = usb_get_intfdata(interface); in atusb_disconnect() local
1131 dev_dbg(&atusb->usb_dev->dev, "%s\n", __func__); in atusb_disconnect()
1133 atusb->shutdown = 1; in atusb_disconnect()
1134 cancel_delayed_work_sync(&atusb->work); in atusb_disconnect()
1136 usb_kill_anchored_urbs(&atusb->rx_urbs); in atusb_disconnect()
1137 atusb_free_urbs(atusb); in atusb_disconnect()
1138 usb_kill_urb(atusb->tx_urb); in atusb_disconnect()
1139 usb_free_urb(atusb->tx_urb); in atusb_disconnect()
1141 ieee802154_unregister_hw(atusb->hw); in atusb_disconnect()
1143 usb_put_dev(atusb->usb_dev); in atusb_disconnect()
1145 ieee802154_free_hw(atusb->hw); in atusb_disconnect()