Lines Matching refs:atusb

43 struct atusb {  struct
67 static int atusb_control_msg(struct atusb *atusb, unsigned int pipe, in atusb_control_msg() argument
72 struct usb_device *usb_dev = atusb->usb_dev; in atusb_control_msg()
75 if (atusb->err) in atusb_control_msg()
76 return atusb->err; in atusb_control_msg()
81 atusb->err = ret; in atusb_control_msg()
89 static int atusb_command(struct atusb *atusb, uint8_t cmd, uint8_t arg) in atusb_command() argument
91 struct usb_device *usb_dev = atusb->usb_dev; in atusb_command()
94 return atusb_control_msg(atusb, usb_sndctrlpipe(usb_dev, 0), in atusb_command()
98 static int atusb_write_reg(struct atusb *atusb, uint8_t reg, uint8_t value) in atusb_write_reg() argument
100 struct usb_device *usb_dev = atusb->usb_dev; in atusb_write_reg()
104 return atusb_control_msg(atusb, usb_sndctrlpipe(usb_dev, 0), in atusb_write_reg()
109 static int atusb_read_reg(struct atusb *atusb, uint8_t reg) in atusb_read_reg() argument
111 struct usb_device *usb_dev = atusb->usb_dev; in atusb_read_reg()
116 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), in atusb_read_reg()
122 static int atusb_write_subreg(struct atusb *atusb, uint8_t reg, uint8_t mask, in atusb_write_subreg() argument
125 struct usb_device *usb_dev = atusb->usb_dev; in atusb_write_subreg()
132 orig = atusb_read_reg(atusb, reg); in atusb_write_subreg()
141 ret = atusb_write_reg(atusb, reg, tmp); in atusb_write_subreg()
146 static int atusb_get_and_clear_error(struct atusb *atusb) in atusb_get_and_clear_error() argument
148 int err = atusb->err; in atusb_get_and_clear_error()
150 atusb->err = 0; in atusb_get_and_clear_error()
159 #define SKB_ATUSB(skb) (*(struct atusb **)(skb)->cb)
163 static int atusb_submit_rx_urb(struct atusb *atusb, struct urb *urb) in atusb_submit_rx_urb() argument
165 struct usb_device *usb_dev = atusb->usb_dev; in atusb_submit_rx_urb()
177 SKB_ATUSB(skb) = atusb; in atusb_submit_rx_urb()
182 usb_anchor_urb(urb, &atusb->rx_urbs); in atusb_submit_rx_urb()
195 struct atusb *atusb = in atusb_work_urbs() local
196 container_of(to_delayed_work(work), struct atusb, work); in atusb_work_urbs()
197 struct usb_device *usb_dev = atusb->usb_dev; in atusb_work_urbs()
201 if (atusb->shutdown) in atusb_work_urbs()
205 urb = usb_get_from_anchor(&atusb->idle_urbs); in atusb_work_urbs()
208 ret = atusb_submit_rx_urb(atusb, urb); in atusb_work_urbs()
211 usb_anchor_urb(urb, &atusb->idle_urbs); in atusb_work_urbs()
214 schedule_delayed_work(&atusb->work, in atusb_work_urbs()
220 static void atusb_tx_done(struct atusb *atusb, uint8_t seq) in atusb_tx_done() argument
222 struct usb_device *usb_dev = atusb->usb_dev; in atusb_tx_done()
223 uint8_t expect = atusb->tx_ack_seq; in atusb_tx_done()
228 ieee802154_xmit_complete(atusb->hw, atusb->tx_skb, false); in atusb_tx_done()
235 ieee802154_wake_queue(atusb->hw); in atusb_tx_done()
236 if (atusb->tx_skb) in atusb_tx_done()
237 dev_kfree_skb_irq(atusb->tx_skb); in atusb_tx_done()
245 struct atusb *atusb = SKB_ATUSB(skb); in atusb_in_good() local
256 atusb_tx_done(atusb, len); in atusb_in_good()
275 ieee802154_rx_irqsafe(atusb->hw, skb, lqi); in atusb_in_good()
283 struct atusb *atusb = SKB_ATUSB(skb); in atusb_in() local
298 usb_anchor_urb(urb, &atusb->idle_urbs); in atusb_in()
299 if (!atusb->shutdown) in atusb_in()
300 schedule_delayed_work(&atusb->work, 0); in atusb_in()
305 static void atusb_free_urbs(struct atusb *atusb) in atusb_free_urbs() argument
310 urb = usb_get_from_anchor(&atusb->idle_urbs); in atusb_free_urbs()
319 static int atusb_alloc_urbs(struct atusb *atusb, int n) in atusb_alloc_urbs() argument
326 atusb_free_urbs(atusb); in atusb_alloc_urbs()
329 usb_anchor_urb(urb, &atusb->idle_urbs); in atusb_alloc_urbs()
344 struct atusb *atusb = hw->priv; in atusb_xmit() local
345 struct usb_device *usb_dev = atusb->usb_dev; in atusb_xmit()
349 atusb->tx_skb = skb; in atusb_xmit()
350 atusb->tx_ack_seq++; in atusb_xmit()
351 atusb->tx_dr.wIndex = cpu_to_le16(atusb->tx_ack_seq); in atusb_xmit()
352 atusb->tx_dr.wLength = cpu_to_le16(skb->len); in atusb_xmit()
354 usb_fill_control_urb(atusb->tx_urb, usb_dev, in atusb_xmit()
356 (unsigned char *)&atusb->tx_dr, skb->data, in atusb_xmit()
358 ret = usb_submit_urb(atusb->tx_urb, GFP_ATOMIC); in atusb_xmit()
365 struct atusb *atusb = hw->priv; in atusb_channel() local
372 ret = atusb_write_reg(atusb, RG_PHY_CC_CCA, channel); in atusb_channel()
390 struct atusb *atusb = hw->priv; in atusb_set_hw_addr_filt() local
391 struct device *dev = &atusb->usb_dev->dev; in atusb_set_hw_addr_filt()
397 atusb_write_reg(atusb, RG_SHORT_ADDR_0, addr); in atusb_set_hw_addr_filt()
398 atusb_write_reg(atusb, RG_SHORT_ADDR_1, addr >> 8); in atusb_set_hw_addr_filt()
405 atusb_write_reg(atusb, RG_PAN_ID_0, pan); in atusb_set_hw_addr_filt()
406 atusb_write_reg(atusb, RG_PAN_ID_1, pan >> 8); in atusb_set_hw_addr_filt()
415 atusb_write_reg(atusb, RG_IEEE_ADDR_0 + i, addr[i]); in atusb_set_hw_addr_filt()
422 atusb_write_subreg(atusb, SR_AACK_I_AM_COORD, 1); in atusb_set_hw_addr_filt()
424 atusb_write_subreg(atusb, SR_AACK_I_AM_COORD, 0); in atusb_set_hw_addr_filt()
427 return atusb_get_and_clear_error(atusb); in atusb_set_hw_addr_filt()
432 struct atusb *atusb = hw->priv; in atusb_start() local
433 struct usb_device *usb_dev = atusb->usb_dev; in atusb_start()
437 schedule_delayed_work(&atusb->work, 0); in atusb_start()
438 atusb_command(atusb, ATUSB_RX_MODE, 1); in atusb_start()
439 ret = atusb_get_and_clear_error(atusb); in atusb_start()
441 usb_kill_anchored_urbs(&atusb->idle_urbs); in atusb_start()
447 struct atusb *atusb = hw->priv; in atusb_stop() local
448 struct usb_device *usb_dev = atusb->usb_dev; in atusb_stop()
451 usb_kill_anchored_urbs(&atusb->idle_urbs); in atusb_stop()
452 atusb_command(atusb, ATUSB_RX_MODE, 0); in atusb_stop()
453 atusb_get_and_clear_error(atusb); in atusb_stop()
465 struct atusb *atusb = hw->priv; in atusb_set_txpower() local
470 return atusb_write_subreg(atusb, SR_TX_PWR_23X, i); in atusb_set_txpower()
479 struct atusb *atusb = hw->priv; in atusb_set_promiscuous_mode() local
483 ret = atusb_write_subreg(atusb, SR_AACK_DIS_ACK, 1); in atusb_set_promiscuous_mode()
487 ret = atusb_write_subreg(atusb, SR_AACK_PROM_MODE, 1); in atusb_set_promiscuous_mode()
491 ret = atusb_write_subreg(atusb, SR_AACK_PROM_MODE, 0); in atusb_set_promiscuous_mode()
495 ret = atusb_write_subreg(atusb, SR_AACK_DIS_ACK, 0); in atusb_set_promiscuous_mode()
517 static int atusb_get_and_show_revision(struct atusb *atusb) in atusb_get_and_show_revision() argument
519 struct usb_device *usb_dev = atusb->usb_dev; in atusb_get_and_show_revision()
524 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), in atusb_get_and_show_revision()
541 static int atusb_get_and_show_build(struct atusb *atusb) in atusb_get_and_show_build() argument
543 struct usb_device *usb_dev = atusb->usb_dev; in atusb_get_and_show_build()
547 ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0), in atusb_get_and_show_build()
558 static int atusb_get_and_show_chip(struct atusb *atusb) in atusb_get_and_show_chip() argument
560 struct usb_device *usb_dev = atusb->usb_dev; in atusb_get_and_show_chip()
564 man_id_0 = atusb_read_reg(atusb, RG_MAN_ID_0); in atusb_get_and_show_chip()
565 man_id_1 = atusb_read_reg(atusb, RG_MAN_ID_1); in atusb_get_and_show_chip()
566 part_num = atusb_read_reg(atusb, RG_PART_NUM); in atusb_get_and_show_chip()
567 version_num = atusb_read_reg(atusb, RG_VERSION_NUM); in atusb_get_and_show_chip()
569 if (atusb->err) in atusb_get_and_show_chip()
570 return atusb->err; in atusb_get_and_show_chip()
598 atusb->err = -ENODEV; in atusb_get_and_show_chip()
609 struct atusb *atusb = NULL; in atusb_probe() local
612 hw = ieee802154_alloc_hw(sizeof(struct atusb), &atusb_ops); in atusb_probe()
616 atusb = hw->priv; in atusb_probe()
617 atusb->hw = hw; in atusb_probe()
618 atusb->usb_dev = usb_get_dev(usb_dev); in atusb_probe()
619 usb_set_intfdata(interface, atusb); in atusb_probe()
621 atusb->shutdown = 0; in atusb_probe()
622 atusb->err = 0; in atusb_probe()
623 INIT_DELAYED_WORK(&atusb->work, atusb_work_urbs); in atusb_probe()
624 init_usb_anchor(&atusb->idle_urbs); in atusb_probe()
625 init_usb_anchor(&atusb->rx_urbs); in atusb_probe()
627 if (atusb_alloc_urbs(atusb, ATUSB_NUM_RX_URBS)) in atusb_probe()
630 atusb->tx_dr.bRequestType = ATUSB_REQ_TO_DEV; in atusb_probe()
631 atusb->tx_dr.bRequest = ATUSB_TX; in atusb_probe()
632 atusb->tx_dr.wValue = cpu_to_le16(0); in atusb_probe()
634 atusb->tx_urb = usb_alloc_urb(0, GFP_ATOMIC); in atusb_probe()
635 if (!atusb->tx_urb) in atusb_probe()
652 atusb_command(atusb, ATUSB_RF_RESET, 0); in atusb_probe()
653 atusb_get_and_show_chip(atusb); in atusb_probe()
654 atusb_get_and_show_revision(atusb); in atusb_probe()
655 atusb_get_and_show_build(atusb); in atusb_probe()
656 ret = atusb_get_and_clear_error(atusb); in atusb_probe()
658 dev_err(&atusb->usb_dev->dev, in atusb_probe()
672 atusb_write_reg(atusb, RG_TRX_STATE, STATE_FORCE_TRX_OFF); in atusb_probe()
698 atusb_write_subreg(atusb, SR_RX_SAFE_MODE, 1); in atusb_probe()
700 atusb_write_reg(atusb, RG_IRQ_MASK, 0xff); in atusb_probe()
702 ret = atusb_get_and_clear_error(atusb); in atusb_probe()
706 dev_err(&atusb->usb_dev->dev, in atusb_probe()
712 atusb_free_urbs(atusb); in atusb_probe()
713 usb_kill_urb(atusb->tx_urb); in atusb_probe()
714 usb_free_urb(atusb->tx_urb); in atusb_probe()
722 struct atusb *atusb = usb_get_intfdata(interface); in atusb_disconnect() local
724 dev_dbg(&atusb->usb_dev->dev, "atusb_disconnect\n"); in atusb_disconnect()
726 atusb->shutdown = 1; in atusb_disconnect()
727 cancel_delayed_work_sync(&atusb->work); in atusb_disconnect()
729 usb_kill_anchored_urbs(&atusb->rx_urbs); in atusb_disconnect()
730 atusb_free_urbs(atusb); in atusb_disconnect()
731 usb_kill_urb(atusb->tx_urb); in atusb_disconnect()
732 usb_free_urb(atusb->tx_urb); in atusb_disconnect()
734 ieee802154_unregister_hw(atusb->hw); in atusb_disconnect()
736 ieee802154_free_hw(atusb->hw); in atusb_disconnect()
739 usb_put_dev(atusb->usb_dev); in atusb_disconnect()