• Home
  • Raw
  • Download

Lines Matching refs:devinfo

179 static void brcmf_usb_rx_refill(struct brcmf_usbdev_info *devinfo,
190 return brcmf_usb_get_buspub(dev)->devinfo; in brcmf_usb_get_businfo()
193 static int brcmf_usb_ioctl_resp_wait(struct brcmf_usbdev_info *devinfo) in brcmf_usb_ioctl_resp_wait() argument
195 return wait_event_timeout(devinfo->ioctl_resp_wait, in brcmf_usb_ioctl_resp_wait()
196 devinfo->ctl_completed, IOCTL_RESP_TIMEOUT); in brcmf_usb_ioctl_resp_wait()
199 static void brcmf_usb_ioctl_resp_wake(struct brcmf_usbdev_info *devinfo) in brcmf_usb_ioctl_resp_wake() argument
201 wake_up(&devinfo->ioctl_resp_wait); in brcmf_usb_ioctl_resp_wake()
205 brcmf_usb_ctl_complete(struct brcmf_usbdev_info *devinfo, int type, int status) in brcmf_usb_ctl_complete() argument
209 if (unlikely(devinfo == NULL)) in brcmf_usb_ctl_complete()
214 devinfo->bus_pub.stats.rx_ctlpkts++; in brcmf_usb_ctl_complete()
216 devinfo->bus_pub.stats.rx_ctlerrs++; in brcmf_usb_ctl_complete()
219 devinfo->bus_pub.stats.tx_ctlpkts++; in brcmf_usb_ctl_complete()
221 devinfo->bus_pub.stats.tx_ctlerrs++; in brcmf_usb_ctl_complete()
224 devinfo->ctl_urb_status = status; in brcmf_usb_ctl_complete()
225 devinfo->ctl_completed = true; in brcmf_usb_ctl_complete()
226 brcmf_usb_ioctl_resp_wake(devinfo); in brcmf_usb_ctl_complete()
232 struct brcmf_usbdev_info *devinfo = in brcmf_usb_ctlread_complete() local
236 devinfo->ctl_urb_actual_length = urb->actual_length; in brcmf_usb_ctlread_complete()
237 brcmf_usb_ctl_complete(devinfo, BRCMF_USB_CBCTL_READ, in brcmf_usb_ctlread_complete()
244 struct brcmf_usbdev_info *devinfo = in brcmf_usb_ctlwrite_complete() local
248 brcmf_usb_ctl_complete(devinfo, BRCMF_USB_CBCTL_WRITE, in brcmf_usb_ctlwrite_complete()
253 brcmf_usb_send_ctl(struct brcmf_usbdev_info *devinfo, u8 *buf, int len) in brcmf_usb_send_ctl() argument
259 if (devinfo == NULL || buf == NULL || in brcmf_usb_send_ctl()
260 len == 0 || devinfo->ctl_urb == NULL) in brcmf_usb_send_ctl()
264 devinfo->ctl_write.wLength = cpu_to_le16p(&size); in brcmf_usb_send_ctl()
265 devinfo->ctl_urb->transfer_buffer_length = size; in brcmf_usb_send_ctl()
266 devinfo->ctl_urb_status = 0; in brcmf_usb_send_ctl()
267 devinfo->ctl_urb_actual_length = 0; in brcmf_usb_send_ctl()
269 usb_fill_control_urb(devinfo->ctl_urb, in brcmf_usb_send_ctl()
270 devinfo->usbdev, in brcmf_usb_send_ctl()
271 devinfo->ctl_out_pipe, in brcmf_usb_send_ctl()
272 (unsigned char *) &devinfo->ctl_write, in brcmf_usb_send_ctl()
275 devinfo); in brcmf_usb_send_ctl()
277 ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC); in brcmf_usb_send_ctl()
285 brcmf_usb_recv_ctl(struct brcmf_usbdev_info *devinfo, u8 *buf, int len) in brcmf_usb_recv_ctl() argument
291 if ((devinfo == NULL) || (buf == NULL) || (len == 0) in brcmf_usb_recv_ctl()
292 || (devinfo->ctl_urb == NULL)) in brcmf_usb_recv_ctl()
296 devinfo->ctl_read.wLength = cpu_to_le16p(&size); in brcmf_usb_recv_ctl()
297 devinfo->ctl_urb->transfer_buffer_length = size; in brcmf_usb_recv_ctl()
299 devinfo->ctl_read.bRequestType = USB_DIR_IN in brcmf_usb_recv_ctl()
301 devinfo->ctl_read.bRequest = 1; in brcmf_usb_recv_ctl()
303 usb_fill_control_urb(devinfo->ctl_urb, in brcmf_usb_recv_ctl()
304 devinfo->usbdev, in brcmf_usb_recv_ctl()
305 devinfo->ctl_in_pipe, in brcmf_usb_recv_ctl()
306 (unsigned char *) &devinfo->ctl_read, in brcmf_usb_recv_ctl()
309 devinfo); in brcmf_usb_recv_ctl()
311 ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC); in brcmf_usb_recv_ctl()
322 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_tx_ctlpkt() local
325 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) in brcmf_usb_tx_ctlpkt()
328 if (test_and_set_bit(0, &devinfo->ctl_op)) in brcmf_usb_tx_ctlpkt()
331 devinfo->ctl_completed = false; in brcmf_usb_tx_ctlpkt()
332 err = brcmf_usb_send_ctl(devinfo, buf, len); in brcmf_usb_tx_ctlpkt()
335 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_tx_ctlpkt()
338 timeout = brcmf_usb_ioctl_resp_wait(devinfo); in brcmf_usb_tx_ctlpkt()
339 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_tx_ctlpkt()
351 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_rx_ctlpkt() local
354 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) in brcmf_usb_rx_ctlpkt()
357 if (test_and_set_bit(0, &devinfo->ctl_op)) in brcmf_usb_rx_ctlpkt()
360 devinfo->ctl_completed = false; in brcmf_usb_rx_ctlpkt()
361 err = brcmf_usb_recv_ctl(devinfo, buf, len); in brcmf_usb_rx_ctlpkt()
364 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_rx_ctlpkt()
367 timeout = brcmf_usb_ioctl_resp_wait(devinfo); in brcmf_usb_rx_ctlpkt()
368 err = devinfo->ctl_urb_status; in brcmf_usb_rx_ctlpkt()
369 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_rx_ctlpkt()
375 return devinfo->ctl_urb_actual_length; in brcmf_usb_rx_ctlpkt()
380 static struct brcmf_usbreq *brcmf_usb_deq(struct brcmf_usbdev_info *devinfo, in brcmf_usb_deq() argument
385 spin_lock_irqsave(&devinfo->qlock, flags); in brcmf_usb_deq()
387 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_deq()
394 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_deq()
399 static void brcmf_usb_enq(struct brcmf_usbdev_info *devinfo, in brcmf_usb_enq() argument
404 spin_lock_irqsave(&devinfo->qlock, flags); in brcmf_usb_enq()
408 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_enq()
464 static void brcmf_usb_del_fromq(struct brcmf_usbdev_info *devinfo, in brcmf_usb_del_fromq() argument
469 spin_lock_irqsave(&devinfo->qlock, flags); in brcmf_usb_del_fromq()
471 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_del_fromq()
478 struct brcmf_usbdev_info *devinfo = req->devinfo; in brcmf_usb_tx_complete() local
483 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_tx_complete()
485 brcmf_txcomplete(devinfo->dev, req->skb, urb->status == 0); in brcmf_usb_tx_complete()
487 brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, &devinfo->tx_freecount); in brcmf_usb_tx_complete()
488 spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx_complete()
489 if (devinfo->tx_freecount > devinfo->tx_high_watermark && in brcmf_usb_tx_complete()
490 devinfo->tx_flowblock) { in brcmf_usb_tx_complete()
491 brcmf_txflowblock(devinfo->dev, false); in brcmf_usb_tx_complete()
492 devinfo->tx_flowblock = false; in brcmf_usb_tx_complete()
494 spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx_complete()
500 struct brcmf_usbdev_info *devinfo = req->devinfo; in brcmf_usb_rx_complete() local
504 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_rx_complete()
511 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_complete()
515 if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_UP) { in brcmf_usb_rx_complete()
517 brcmf_rx_frame(devinfo->dev, skb, true); in brcmf_usb_rx_complete()
518 brcmf_usb_rx_refill(devinfo, req); in brcmf_usb_rx_complete()
521 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_complete()
527 static void brcmf_usb_rx_refill(struct brcmf_usbdev_info *devinfo, in brcmf_usb_rx_refill() argument
533 if (!req || !devinfo) in brcmf_usb_rx_refill()
536 skb = dev_alloc_skb(devinfo->bus_pub.bus_mtu); in brcmf_usb_rx_refill()
538 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_refill()
543 usb_fill_bulk_urb(req->urb, devinfo->usbdev, devinfo->rx_pipe, in brcmf_usb_rx_refill()
546 req->devinfo = devinfo; in brcmf_usb_rx_refill()
547 brcmf_usb_enq(devinfo, &devinfo->rx_postq, req, NULL); in brcmf_usb_rx_refill()
551 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_rx_refill()
554 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_refill()
559 static void brcmf_usb_rx_fill_all(struct brcmf_usbdev_info *devinfo) in brcmf_usb_rx_fill_all() argument
563 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) { in brcmf_usb_rx_fill_all()
564 brcmf_err("bus is not up=%d\n", devinfo->bus_pub.state); in brcmf_usb_rx_fill_all()
567 while ((req = brcmf_usb_deq(devinfo, &devinfo->rx_freeq, NULL)) != NULL) in brcmf_usb_rx_fill_all()
568 brcmf_usb_rx_refill(devinfo, req); in brcmf_usb_rx_fill_all()
572 brcmf_usb_state_change(struct brcmf_usbdev_info *devinfo, int state) in brcmf_usb_state_change() argument
574 struct brcmf_bus *bcmf_bus = devinfo->bus_pub.bus; in brcmf_usb_state_change()
578 devinfo->bus_pub.state, state); in brcmf_usb_state_change()
580 if (devinfo->bus_pub.state == state) in brcmf_usb_state_change()
583 old_state = devinfo->bus_pub.state; in brcmf_usb_state_change()
584 devinfo->bus_pub.state = state; in brcmf_usb_state_change()
600 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_tx() local
606 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) { in brcmf_usb_tx()
611 req = brcmf_usb_deq(devinfo, &devinfo->tx_freeq, in brcmf_usb_tx()
612 &devinfo->tx_freecount); in brcmf_usb_tx()
620 req->devinfo = devinfo; in brcmf_usb_tx()
621 usb_fill_bulk_urb(req->urb, devinfo->usbdev, devinfo->tx_pipe, in brcmf_usb_tx()
624 brcmf_usb_enq(devinfo, &devinfo->tx_postq, req, NULL); in brcmf_usb_tx()
628 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_tx()
630 brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, in brcmf_usb_tx()
631 &devinfo->tx_freecount); in brcmf_usb_tx()
635 spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx()
636 if (devinfo->tx_freecount < devinfo->tx_low_watermark && in brcmf_usb_tx()
637 !devinfo->tx_flowblock) { in brcmf_usb_tx()
639 devinfo->tx_flowblock = true; in brcmf_usb_tx()
641 spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx()
651 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_up() local
654 if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_UP) in brcmf_usb_up()
658 brcmf_usb_state_change(devinfo, BRCMFMAC_USB_STATE_UP); in brcmf_usb_up()
660 if (devinfo->ctl_urb) { in brcmf_usb_up()
661 devinfo->ctl_in_pipe = usb_rcvctrlpipe(devinfo->usbdev, 0); in brcmf_usb_up()
662 devinfo->ctl_out_pipe = usb_sndctrlpipe(devinfo->usbdev, 0); in brcmf_usb_up()
665 devinfo->ctl_write.bRequestType = in brcmf_usb_up()
667 devinfo->ctl_write.bRequest = 0; in brcmf_usb_up()
668 devinfo->ctl_write.wValue = cpu_to_le16(0); in brcmf_usb_up()
669 devinfo->ctl_write.wIndex = cpu_to_le16(devinfo->ifnum); in brcmf_usb_up()
672 devinfo->ctl_read.bRequestType = in brcmf_usb_up()
674 devinfo->ctl_read.bRequest = 1; in brcmf_usb_up()
675 devinfo->ctl_read.wValue = cpu_to_le16(0); in brcmf_usb_up()
676 devinfo->ctl_read.wIndex = cpu_to_le16(devinfo->ifnum); in brcmf_usb_up()
678 brcmf_usb_rx_fill_all(devinfo); in brcmf_usb_up()
682 static void brcmf_cancel_all_urbs(struct brcmf_usbdev_info *devinfo) in brcmf_cancel_all_urbs() argument
684 if (devinfo->ctl_urb) in brcmf_cancel_all_urbs()
685 usb_kill_urb(devinfo->ctl_urb); in brcmf_cancel_all_urbs()
686 if (devinfo->bulk_urb) in brcmf_cancel_all_urbs()
687 usb_kill_urb(devinfo->bulk_urb); in brcmf_cancel_all_urbs()
688 brcmf_usb_free_q(&devinfo->tx_postq, true); in brcmf_cancel_all_urbs()
689 brcmf_usb_free_q(&devinfo->rx_postq, true); in brcmf_cancel_all_urbs()
694 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_down() local
697 if (devinfo == NULL) in brcmf_usb_down()
700 if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_DOWN) in brcmf_usb_down()
703 brcmf_usb_state_change(devinfo, BRCMFMAC_USB_STATE_DOWN); in brcmf_usb_down()
705 brcmf_cancel_all_urbs(devinfo); in brcmf_usb_down()
711 struct brcmf_usbdev_info *devinfo = in brcmf_usb_sync_complete() local
714 devinfo->ctl_completed = true; in brcmf_usb_sync_complete()
715 brcmf_usb_ioctl_resp_wake(devinfo); in brcmf_usb_sync_complete()
718 static int brcmf_usb_dl_cmd(struct brcmf_usbdev_info *devinfo, u8 cmd, in brcmf_usb_dl_cmd() argument
725 if ((!devinfo) || (devinfo->ctl_urb == NULL)) in brcmf_usb_dl_cmd()
733 devinfo->ctl_urb->transfer_buffer_length = size; in brcmf_usb_dl_cmd()
735 devinfo->ctl_read.wLength = cpu_to_le16p(&size); in brcmf_usb_dl_cmd()
736 devinfo->ctl_read.bRequestType = USB_DIR_IN | USB_TYPE_VENDOR | in brcmf_usb_dl_cmd()
738 devinfo->ctl_read.bRequest = cmd; in brcmf_usb_dl_cmd()
740 usb_fill_control_urb(devinfo->ctl_urb, in brcmf_usb_dl_cmd()
741 devinfo->usbdev, in brcmf_usb_dl_cmd()
742 usb_rcvctrlpipe(devinfo->usbdev, 0), in brcmf_usb_dl_cmd()
743 (unsigned char *) &devinfo->ctl_read, in brcmf_usb_dl_cmd()
745 (usb_complete_t)brcmf_usb_sync_complete, devinfo); in brcmf_usb_dl_cmd()
747 devinfo->ctl_completed = false; in brcmf_usb_dl_cmd()
748 ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC); in brcmf_usb_dl_cmd()
754 if (!brcmf_usb_ioctl_resp_wait(devinfo)) { in brcmf_usb_dl_cmd()
755 usb_kill_urb(devinfo->ctl_urb); in brcmf_usb_dl_cmd()
767 brcmf_usb_dlneeded(struct brcmf_usbdev_info *devinfo) in brcmf_usb_dlneeded() argument
774 if (devinfo == NULL) in brcmf_usb_dlneeded()
779 brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id)); in brcmf_usb_dlneeded()
790 brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id)); in brcmf_usb_dlneeded()
793 devinfo->bus_pub.devid = chipid; in brcmf_usb_dlneeded()
794 devinfo->bus_pub.chiprev = chiprev; in brcmf_usb_dlneeded()
800 brcmf_usb_resetcfg(struct brcmf_usbdev_info *devinfo) in brcmf_usb_resetcfg() argument
813 err = brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id)); in brcmf_usb_resetcfg()
824 brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id)); in brcmf_usb_resetcfg()
835 brcmf_usb_dl_send_bulk(struct brcmf_usbdev_info *devinfo, void *buffer, int len) in brcmf_usb_dl_send_bulk() argument
839 if ((devinfo == NULL) || (devinfo->bulk_urb == NULL)) in brcmf_usb_dl_send_bulk()
843 usb_fill_bulk_urb(devinfo->bulk_urb, devinfo->usbdev, in brcmf_usb_dl_send_bulk()
844 devinfo->tx_pipe, buffer, len, in brcmf_usb_dl_send_bulk()
845 (usb_complete_t)brcmf_usb_sync_complete, devinfo); in brcmf_usb_dl_send_bulk()
847 devinfo->bulk_urb->transfer_flags |= URB_ZERO_PACKET; in brcmf_usb_dl_send_bulk()
849 devinfo->ctl_completed = false; in brcmf_usb_dl_send_bulk()
850 ret = usb_submit_urb(devinfo->bulk_urb, GFP_ATOMIC); in brcmf_usb_dl_send_bulk()
855 ret = brcmf_usb_ioctl_resp_wait(devinfo); in brcmf_usb_dl_send_bulk()
860 brcmf_usb_dl_writeimage(struct brcmf_usbdev_info *devinfo, u8 *fw, int fwlen) in brcmf_usb_dl_writeimage() argument
877 brcmf_usb_dl_cmd(devinfo, DL_START, &state, sizeof(state)); in brcmf_usb_dl_writeimage()
911 if (brcmf_usb_dl_send_bulk(devinfo, bulkchunk, in brcmf_usb_dl_writeimage()
921 err = brcmf_usb_dl_cmd(devinfo, DL_GETSTATE, &state, in brcmf_usb_dl_writeimage()
946 static int brcmf_usb_dlstart(struct brcmf_usbdev_info *devinfo, u8 *fw, int len) in brcmf_usb_dlstart() argument
952 if (devinfo == NULL) in brcmf_usb_dlstart()
955 if (devinfo->bus_pub.devid == 0xDEAD) in brcmf_usb_dlstart()
958 err = brcmf_usb_dl_writeimage(devinfo, fw, len); in brcmf_usb_dlstart()
960 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DL_DONE; in brcmf_usb_dlstart()
962 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DL_FAIL; in brcmf_usb_dlstart()
968 static int brcmf_usb_dlrun(struct brcmf_usbdev_info *devinfo) in brcmf_usb_dlrun() argument
973 if (!devinfo) in brcmf_usb_dlrun()
976 if (devinfo->bus_pub.devid == 0xDEAD) in brcmf_usb_dlrun()
981 brcmf_usb_dl_cmd(devinfo, DL_GETSTATE, &state, sizeof(state)); in brcmf_usb_dlrun()
985 if (brcmf_usb_dl_cmd(devinfo, DL_GO, &state, sizeof(state))) in brcmf_usb_dlrun()
987 if (brcmf_usb_resetcfg(devinfo)) in brcmf_usb_dlrun()
999 brcmf_usb_fw_download(struct brcmf_usbdev_info *devinfo) in brcmf_usb_fw_download() argument
1004 if (devinfo == NULL) in brcmf_usb_fw_download()
1007 if (!devinfo->image) { in brcmf_usb_fw_download()
1012 err = brcmf_usb_dlstart(devinfo, in brcmf_usb_fw_download()
1013 (u8 *)devinfo->image, devinfo->image_len); in brcmf_usb_fw_download()
1015 err = brcmf_usb_dlrun(devinfo); in brcmf_usb_fw_download()
1020 static void brcmf_usb_detach(struct brcmf_usbdev_info *devinfo) in brcmf_usb_detach() argument
1022 brcmf_dbg(USB, "Enter, devinfo %p\n", devinfo); in brcmf_usb_detach()
1025 brcmf_usb_free_q(&devinfo->rx_freeq, false); in brcmf_usb_detach()
1026 brcmf_usb_free_q(&devinfo->tx_freeq, false); in brcmf_usb_detach()
1028 usb_free_urb(devinfo->ctl_urb); in brcmf_usb_detach()
1029 usb_free_urb(devinfo->bulk_urb); in brcmf_usb_detach()
1031 kfree(devinfo->tx_reqs); in brcmf_usb_detach()
1032 kfree(devinfo->rx_reqs); in brcmf_usb_detach()
1034 if (devinfo->settings) in brcmf_usb_detach()
1035 brcmf_release_module_param(devinfo->settings); in brcmf_usb_detach()
1061 struct brcmf_usbdev *brcmf_usb_attach(struct brcmf_usbdev_info *devinfo, in brcmf_usb_attach() argument
1066 devinfo->bus_pub.nrxq = nrxq; in brcmf_usb_attach()
1067 devinfo->rx_low_watermark = nrxq / 2; in brcmf_usb_attach()
1068 devinfo->bus_pub.devinfo = devinfo; in brcmf_usb_attach()
1069 devinfo->bus_pub.ntxq = ntxq; in brcmf_usb_attach()
1070 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DOWN; in brcmf_usb_attach()
1073 devinfo->tx_low_watermark = ntxq / 4; in brcmf_usb_attach()
1074 devinfo->tx_high_watermark = devinfo->tx_low_watermark * 3; in brcmf_usb_attach()
1075 devinfo->bus_pub.bus_mtu = BRCMF_USB_MAX_PKT_SIZE; in brcmf_usb_attach()
1078 init_waitqueue_head(&devinfo->ioctl_resp_wait); in brcmf_usb_attach()
1081 spin_lock_init(&devinfo->qlock); in brcmf_usb_attach()
1082 spin_lock_init(&devinfo->tx_flowblock_lock); in brcmf_usb_attach()
1084 INIT_LIST_HEAD(&devinfo->rx_freeq); in brcmf_usb_attach()
1085 INIT_LIST_HEAD(&devinfo->rx_postq); in brcmf_usb_attach()
1087 INIT_LIST_HEAD(&devinfo->tx_freeq); in brcmf_usb_attach()
1088 INIT_LIST_HEAD(&devinfo->tx_postq); in brcmf_usb_attach()
1090 devinfo->tx_flowblock = false; in brcmf_usb_attach()
1092 devinfo->rx_reqs = brcmf_usbdev_qinit(&devinfo->rx_freeq, nrxq); in brcmf_usb_attach()
1093 if (!devinfo->rx_reqs) in brcmf_usb_attach()
1096 devinfo->tx_reqs = brcmf_usbdev_qinit(&devinfo->tx_freeq, ntxq); in brcmf_usb_attach()
1097 if (!devinfo->tx_reqs) in brcmf_usb_attach()
1099 devinfo->tx_freecount = ntxq; in brcmf_usb_attach()
1101 devinfo->ctl_urb = usb_alloc_urb(0, GFP_ATOMIC); in brcmf_usb_attach()
1102 if (!devinfo->ctl_urb) in brcmf_usb_attach()
1104 devinfo->bulk_urb = usb_alloc_urb(0, GFP_ATOMIC); in brcmf_usb_attach()
1105 if (!devinfo->bulk_urb) in brcmf_usb_attach()
1108 return &devinfo->bus_pub; in brcmf_usb_attach()
1112 brcmf_usb_detach(devinfo); in brcmf_usb_attach()
1118 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_wowl_config() local
1121 devinfo->wowl_enabled = enabled; in brcmf_usb_wowl_config()
1123 device_set_wakeup_enable(devinfo->dev, true); in brcmf_usb_wowl_config()
1125 device_set_wakeup_enable(devinfo->dev, false); in brcmf_usb_wowl_config()
1136 static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo) in brcmf_usb_bus_setup() argument
1141 ret = brcmf_attach(devinfo->dev, devinfo->settings); in brcmf_usb_bus_setup()
1147 ret = brcmf_usb_up(devinfo->dev); in brcmf_usb_bus_setup()
1151 ret = brcmf_bus_start(devinfo->dev); in brcmf_usb_bus_setup()
1157 brcmf_detach(devinfo->dev); in brcmf_usb_bus_setup()
1166 struct brcmf_usbdev_info *devinfo = bus->bus_priv.usb->devinfo; in brcmf_usb_probe_phase2() local
1180 devinfo->image = fw->data; in brcmf_usb_probe_phase2()
1181 devinfo->image_len = fw->size; in brcmf_usb_probe_phase2()
1183 ret = brcmf_usb_fw_download(devinfo); in brcmf_usb_probe_phase2()
1188 ret = brcmf_usb_bus_setup(devinfo); in brcmf_usb_probe_phase2()
1192 mutex_unlock(&devinfo->dev_init_lock); in brcmf_usb_probe_phase2()
1196 mutex_unlock(&devinfo->dev_init_lock); in brcmf_usb_probe_phase2()
1200 static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo) in brcmf_usb_probe_cb() argument
1204 struct device *dev = devinfo->dev; in brcmf_usb_probe_cb()
1208 bus_pub = brcmf_usb_attach(devinfo, BRCMF_USB_NRXQ, BRCMF_USB_NTXQ); in brcmf_usb_probe_cb()
1229 devinfo->settings = brcmf_get_module_param(bus->dev, BRCMF_BUSTYPE_USB, in brcmf_usb_probe_cb()
1232 if (!devinfo->settings) { in brcmf_usb_probe_cb()
1237 if (!brcmf_usb_dlneeded(devinfo)) { in brcmf_usb_probe_cb()
1238 ret = brcmf_usb_bus_setup(devinfo); in brcmf_usb_probe_cb()
1242 mutex_unlock(&devinfo->dev_init_lock); in brcmf_usb_probe_cb()
1251 devinfo->fw_name, NULL); in brcmf_usb_probe_cb()
1256 ret = brcmf_fw_get_firmwares(dev, 0, devinfo->fw_name, NULL, in brcmf_usb_probe_cb()
1268 brcmf_usb_detach(devinfo); in brcmf_usb_probe_cb()
1273 brcmf_usb_disconnect_cb(struct brcmf_usbdev_info *devinfo) in brcmf_usb_disconnect_cb() argument
1275 if (!devinfo) in brcmf_usb_disconnect_cb()
1277 brcmf_dbg(USB, "Enter, bus_pub %p\n", devinfo); in brcmf_usb_disconnect_cb()
1279 brcmf_detach(devinfo->dev); in brcmf_usb_disconnect_cb()
1280 kfree(devinfo->bus_pub.bus); in brcmf_usb_disconnect_cb()
1281 brcmf_usb_detach(devinfo); in brcmf_usb_disconnect_cb()
1288 struct brcmf_usbdev_info *devinfo; in brcmf_usb_probe() local
1297 devinfo = kzalloc(sizeof(*devinfo), GFP_ATOMIC); in brcmf_usb_probe()
1298 if (devinfo == NULL) in brcmf_usb_probe()
1301 devinfo->usbdev = usb; in brcmf_usb_probe()
1302 devinfo->dev = &usb->dev; in brcmf_usb_probe()
1306 mutex_init(&devinfo->dev_init_lock); in brcmf_usb_probe()
1307 mutex_lock(&devinfo->dev_init_lock); in brcmf_usb_probe()
1309 usb_set_intfdata(intf, devinfo); in brcmf_usb_probe()
1346 if (!devinfo->rx_pipe) in brcmf_usb_probe()
1347 devinfo->rx_pipe = in brcmf_usb_probe()
1350 if (!devinfo->tx_pipe) in brcmf_usb_probe()
1351 devinfo->tx_pipe = in brcmf_usb_probe()
1355 if (devinfo->rx_pipe == 0) { in brcmf_usb_probe()
1360 if (devinfo->tx_pipe == 0) { in brcmf_usb_probe()
1366 devinfo->ifnum = desc->bInterfaceNumber; in brcmf_usb_probe()
1377 ret = brcmf_usb_probe_cb(devinfo); in brcmf_usb_probe()
1385 mutex_unlock(&devinfo->dev_init_lock); in brcmf_usb_probe()
1386 kfree(devinfo); in brcmf_usb_probe()
1394 struct brcmf_usbdev_info *devinfo; in brcmf_usb_disconnect() local
1397 devinfo = (struct brcmf_usbdev_info *)usb_get_intfdata(intf); in brcmf_usb_disconnect()
1399 if (devinfo) { in brcmf_usb_disconnect()
1400 mutex_lock(&devinfo->dev_init_lock); in brcmf_usb_disconnect()
1407 brcmf_usb_disconnect_cb(devinfo); in brcmf_usb_disconnect()
1408 kfree(devinfo); in brcmf_usb_disconnect()
1420 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev); in brcmf_usb_suspend() local
1423 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_SLEEP; in brcmf_usb_suspend()
1424 if (devinfo->wowl_enabled) in brcmf_usb_suspend()
1425 brcmf_cancel_all_urbs(devinfo); in brcmf_usb_suspend()
1437 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev); in brcmf_usb_resume() local
1440 if (!devinfo->wowl_enabled) in brcmf_usb_resume()
1441 return brcmf_usb_bus_setup(devinfo); in brcmf_usb_resume()
1443 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_UP; in brcmf_usb_resume()
1444 brcmf_usb_rx_fill_all(devinfo); in brcmf_usb_resume()
1451 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev); in brcmf_usb_reset_resume() local
1455 return brcmf_fw_get_firmwares(&usb->dev, 0, devinfo->fw_name, NULL, in brcmf_usb_reset_resume()