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