Lines Matching refs:devinfo

170 static void brcmf_usb_rx_refill(struct brcmf_usbdev_info *devinfo,
181 return brcmf_usb_get_buspub(dev)->devinfo; in brcmf_usb_get_businfo()
184 static int brcmf_usb_ioctl_resp_wait(struct brcmf_usbdev_info *devinfo) in brcmf_usb_ioctl_resp_wait() argument
186 return wait_event_timeout(devinfo->ioctl_resp_wait, in brcmf_usb_ioctl_resp_wait()
187 devinfo->ctl_completed, IOCTL_RESP_TIMEOUT); in brcmf_usb_ioctl_resp_wait()
190 static void brcmf_usb_ioctl_resp_wake(struct brcmf_usbdev_info *devinfo) in brcmf_usb_ioctl_resp_wake() argument
192 wake_up(&devinfo->ioctl_resp_wait); in brcmf_usb_ioctl_resp_wake()
196 brcmf_usb_ctl_complete(struct brcmf_usbdev_info *devinfo, int type, int status) in brcmf_usb_ctl_complete() argument
200 if (unlikely(devinfo == NULL)) in brcmf_usb_ctl_complete()
205 devinfo->bus_pub.stats.rx_ctlpkts++; in brcmf_usb_ctl_complete()
207 devinfo->bus_pub.stats.rx_ctlerrs++; in brcmf_usb_ctl_complete()
210 devinfo->bus_pub.stats.tx_ctlpkts++; in brcmf_usb_ctl_complete()
212 devinfo->bus_pub.stats.tx_ctlerrs++; in brcmf_usb_ctl_complete()
215 devinfo->ctl_urb_status = status; in brcmf_usb_ctl_complete()
216 devinfo->ctl_completed = true; in brcmf_usb_ctl_complete()
217 brcmf_usb_ioctl_resp_wake(devinfo); in brcmf_usb_ctl_complete()
223 struct brcmf_usbdev_info *devinfo = in brcmf_usb_ctlread_complete() local
227 devinfo->ctl_urb_actual_length = urb->actual_length; in brcmf_usb_ctlread_complete()
228 brcmf_usb_ctl_complete(devinfo, BRCMF_USB_CBCTL_READ, in brcmf_usb_ctlread_complete()
235 struct brcmf_usbdev_info *devinfo = in brcmf_usb_ctlwrite_complete() local
239 brcmf_usb_ctl_complete(devinfo, BRCMF_USB_CBCTL_WRITE, in brcmf_usb_ctlwrite_complete()
244 brcmf_usb_send_ctl(struct brcmf_usbdev_info *devinfo, u8 *buf, int len) in brcmf_usb_send_ctl() argument
250 if (devinfo == NULL || buf == NULL || in brcmf_usb_send_ctl()
251 len == 0 || devinfo->ctl_urb == NULL) in brcmf_usb_send_ctl()
255 devinfo->ctl_write.wLength = cpu_to_le16p(&size); in brcmf_usb_send_ctl()
256 devinfo->ctl_urb->transfer_buffer_length = size; in brcmf_usb_send_ctl()
257 devinfo->ctl_urb_status = 0; in brcmf_usb_send_ctl()
258 devinfo->ctl_urb_actual_length = 0; in brcmf_usb_send_ctl()
260 usb_fill_control_urb(devinfo->ctl_urb, in brcmf_usb_send_ctl()
261 devinfo->usbdev, in brcmf_usb_send_ctl()
262 devinfo->ctl_out_pipe, in brcmf_usb_send_ctl()
263 (unsigned char *) &devinfo->ctl_write, in brcmf_usb_send_ctl()
266 devinfo); in brcmf_usb_send_ctl()
268 ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC); in brcmf_usb_send_ctl()
276 brcmf_usb_recv_ctl(struct brcmf_usbdev_info *devinfo, u8 *buf, int len) in brcmf_usb_recv_ctl() argument
282 if ((devinfo == NULL) || (buf == NULL) || (len == 0) in brcmf_usb_recv_ctl()
283 || (devinfo->ctl_urb == NULL)) in brcmf_usb_recv_ctl()
287 devinfo->ctl_read.wLength = cpu_to_le16p(&size); in brcmf_usb_recv_ctl()
288 devinfo->ctl_urb->transfer_buffer_length = size; in brcmf_usb_recv_ctl()
290 devinfo->ctl_read.bRequestType = USB_DIR_IN in brcmf_usb_recv_ctl()
292 devinfo->ctl_read.bRequest = 1; in brcmf_usb_recv_ctl()
294 usb_fill_control_urb(devinfo->ctl_urb, in brcmf_usb_recv_ctl()
295 devinfo->usbdev, in brcmf_usb_recv_ctl()
296 devinfo->ctl_in_pipe, in brcmf_usb_recv_ctl()
297 (unsigned char *) &devinfo->ctl_read, in brcmf_usb_recv_ctl()
300 devinfo); in brcmf_usb_recv_ctl()
302 ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC); in brcmf_usb_recv_ctl()
313 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_tx_ctlpkt() local
322 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) { in brcmf_usb_tx_ctlpkt()
327 if (test_and_set_bit(0, &devinfo->ctl_op)) { in brcmf_usb_tx_ctlpkt()
332 devinfo->ctl_completed = false; in brcmf_usb_tx_ctlpkt()
333 err = brcmf_usb_send_ctl(devinfo, buf, len); in brcmf_usb_tx_ctlpkt()
336 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_tx_ctlpkt()
339 timeout = brcmf_usb_ioctl_resp_wait(devinfo); in brcmf_usb_tx_ctlpkt()
342 usb_kill_urb(devinfo->ctl_urb); in brcmf_usb_tx_ctlpkt()
346 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_tx_ctlpkt()
358 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_rx_ctlpkt() local
367 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) { in brcmf_usb_rx_ctlpkt()
372 if (test_and_set_bit(0, &devinfo->ctl_op)) { in brcmf_usb_rx_ctlpkt()
377 devinfo->ctl_completed = false; in brcmf_usb_rx_ctlpkt()
378 err = brcmf_usb_recv_ctl(devinfo, buf, len); in brcmf_usb_rx_ctlpkt()
381 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_rx_ctlpkt()
384 timeout = brcmf_usb_ioctl_resp_wait(devinfo); in brcmf_usb_rx_ctlpkt()
385 err = devinfo->ctl_urb_status; in brcmf_usb_rx_ctlpkt()
388 usb_kill_urb(devinfo->ctl_urb); in brcmf_usb_rx_ctlpkt()
392 clear_bit(0, &devinfo->ctl_op); in brcmf_usb_rx_ctlpkt()
396 return devinfo->ctl_urb_actual_length; in brcmf_usb_rx_ctlpkt()
401 static struct brcmf_usbreq *brcmf_usb_deq(struct brcmf_usbdev_info *devinfo, in brcmf_usb_deq() argument
406 spin_lock_irqsave(&devinfo->qlock, flags); in brcmf_usb_deq()
408 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_deq()
415 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_deq()
420 static void brcmf_usb_enq(struct brcmf_usbdev_info *devinfo, in brcmf_usb_enq() argument
425 spin_lock_irqsave(&devinfo->qlock, flags); in brcmf_usb_enq()
429 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_enq()
481 static void brcmf_usb_del_fromq(struct brcmf_usbdev_info *devinfo, in brcmf_usb_del_fromq() argument
486 spin_lock_irqsave(&devinfo->qlock, flags); in brcmf_usb_del_fromq()
488 spin_unlock_irqrestore(&devinfo->qlock, flags); in brcmf_usb_del_fromq()
495 struct brcmf_usbdev_info *devinfo = req->devinfo; in brcmf_usb_tx_complete() local
500 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_tx_complete()
502 brcmf_proto_bcdc_txcomplete(devinfo->dev, req->skb, urb->status == 0); in brcmf_usb_tx_complete()
504 brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, &devinfo->tx_freecount); in brcmf_usb_tx_complete()
505 spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx_complete()
506 if (devinfo->tx_freecount > devinfo->tx_high_watermark && in brcmf_usb_tx_complete()
507 devinfo->tx_flowblock) { in brcmf_usb_tx_complete()
508 brcmf_proto_bcdc_txflowblock(devinfo->dev, false); in brcmf_usb_tx_complete()
509 devinfo->tx_flowblock = false; in brcmf_usb_tx_complete()
511 spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx_complete()
517 struct brcmf_usbdev_info *devinfo = req->devinfo; in brcmf_usb_rx_complete() local
521 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_rx_complete()
528 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_complete()
532 if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_UP || in brcmf_usb_rx_complete()
533 devinfo->bus_pub.state == BRCMFMAC_USB_STATE_SLEEP) { in brcmf_usb_rx_complete()
535 brcmf_rx_frame(devinfo->dev, skb, true, true); in brcmf_usb_rx_complete()
536 brcmf_usb_rx_refill(devinfo, req); in brcmf_usb_rx_complete()
540 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_complete()
546 static void brcmf_usb_rx_refill(struct brcmf_usbdev_info *devinfo, in brcmf_usb_rx_refill() argument
552 if (!req || !devinfo) in brcmf_usb_rx_refill()
555 skb = dev_alloc_skb(devinfo->bus_pub.bus_mtu); in brcmf_usb_rx_refill()
557 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_refill()
562 usb_fill_bulk_urb(req->urb, devinfo->usbdev, devinfo->rx_pipe, in brcmf_usb_rx_refill()
565 req->devinfo = devinfo; in brcmf_usb_rx_refill()
566 brcmf_usb_enq(devinfo, &devinfo->rx_postq, req, NULL); in brcmf_usb_rx_refill()
570 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_rx_refill()
573 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL); in brcmf_usb_rx_refill()
578 static void brcmf_usb_rx_fill_all(struct brcmf_usbdev_info *devinfo) in brcmf_usb_rx_fill_all() argument
582 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) { in brcmf_usb_rx_fill_all()
583 brcmf_err("bus is not up=%d\n", devinfo->bus_pub.state); in brcmf_usb_rx_fill_all()
586 while ((req = brcmf_usb_deq(devinfo, &devinfo->rx_freeq, NULL)) != NULL) in brcmf_usb_rx_fill_all()
587 brcmf_usb_rx_refill(devinfo, req); in brcmf_usb_rx_fill_all()
591 brcmf_usb_state_change(struct brcmf_usbdev_info *devinfo, int state) in brcmf_usb_state_change() argument
593 struct brcmf_bus *bcmf_bus = devinfo->bus_pub.bus; in brcmf_usb_state_change()
596 devinfo->bus_pub.state, state); in brcmf_usb_state_change()
598 if (devinfo->bus_pub.state == state) in brcmf_usb_state_change()
601 devinfo->bus_pub.state = state; in brcmf_usb_state_change()
617 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_tx() local
628 if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) { in brcmf_usb_tx()
633 req = brcmf_usb_deq(devinfo, &devinfo->tx_freeq, in brcmf_usb_tx()
634 &devinfo->tx_freecount); in brcmf_usb_tx()
642 req->devinfo = devinfo; in brcmf_usb_tx()
643 usb_fill_bulk_urb(req->urb, devinfo->usbdev, devinfo->tx_pipe, in brcmf_usb_tx()
646 brcmf_usb_enq(devinfo, &devinfo->tx_postq, req, NULL); in brcmf_usb_tx()
650 brcmf_usb_del_fromq(devinfo, req); in brcmf_usb_tx()
652 brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, in brcmf_usb_tx()
653 &devinfo->tx_freecount); in brcmf_usb_tx()
657 spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx()
658 if (devinfo->tx_freecount < devinfo->tx_low_watermark && in brcmf_usb_tx()
659 !devinfo->tx_flowblock) { in brcmf_usb_tx()
661 devinfo->tx_flowblock = true; in brcmf_usb_tx()
663 spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags); in brcmf_usb_tx()
674 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_up() local
677 if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_UP) in brcmf_usb_up()
681 brcmf_usb_state_change(devinfo, BRCMFMAC_USB_STATE_UP); in brcmf_usb_up()
683 if (devinfo->ctl_urb) { in brcmf_usb_up()
684 devinfo->ctl_in_pipe = usb_rcvctrlpipe(devinfo->usbdev, 0); in brcmf_usb_up()
685 devinfo->ctl_out_pipe = usb_sndctrlpipe(devinfo->usbdev, 0); in brcmf_usb_up()
688 devinfo->ctl_write.bRequestType = in brcmf_usb_up()
690 devinfo->ctl_write.bRequest = 0; in brcmf_usb_up()
691 devinfo->ctl_write.wValue = cpu_to_le16(0); in brcmf_usb_up()
692 devinfo->ctl_write.wIndex = cpu_to_le16(devinfo->ifnum); in brcmf_usb_up()
695 devinfo->ctl_read.bRequestType = in brcmf_usb_up()
697 devinfo->ctl_read.bRequest = 1; in brcmf_usb_up()
698 devinfo->ctl_read.wValue = cpu_to_le16(0); in brcmf_usb_up()
699 devinfo->ctl_read.wIndex = cpu_to_le16(devinfo->ifnum); in brcmf_usb_up()
701 brcmf_usb_rx_fill_all(devinfo); in brcmf_usb_up()
705 static void brcmf_cancel_all_urbs(struct brcmf_usbdev_info *devinfo) in brcmf_cancel_all_urbs() argument
709 if (devinfo->ctl_urb) in brcmf_cancel_all_urbs()
710 usb_kill_urb(devinfo->ctl_urb); in brcmf_cancel_all_urbs()
711 if (devinfo->bulk_urb) in brcmf_cancel_all_urbs()
712 usb_kill_urb(devinfo->bulk_urb); in brcmf_cancel_all_urbs()
713 if (devinfo->tx_reqs) in brcmf_cancel_all_urbs()
714 for (i = 0; i < devinfo->bus_pub.ntxq; i++) in brcmf_cancel_all_urbs()
715 usb_kill_urb(devinfo->tx_reqs[i].urb); in brcmf_cancel_all_urbs()
716 if (devinfo->rx_reqs) in brcmf_cancel_all_urbs()
717 for (i = 0; i < devinfo->bus_pub.nrxq; i++) in brcmf_cancel_all_urbs()
718 usb_kill_urb(devinfo->rx_reqs[i].urb); in brcmf_cancel_all_urbs()
723 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev); in brcmf_usb_down() local
726 if (devinfo == NULL) in brcmf_usb_down()
729 if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_DOWN) in brcmf_usb_down()
732 brcmf_usb_state_change(devinfo, BRCMFMAC_USB_STATE_DOWN); in brcmf_usb_down()
734 brcmf_cancel_all_urbs(devinfo); in brcmf_usb_down()
740 struct brcmf_usbdev_info *devinfo = in brcmf_usb_sync_complete() local
743 devinfo->ctl_completed = true; in brcmf_usb_sync_complete()
744 brcmf_usb_ioctl_resp_wake(devinfo); in brcmf_usb_sync_complete()
747 static int brcmf_usb_dl_cmd(struct brcmf_usbdev_info *devinfo, u8 cmd, in brcmf_usb_dl_cmd() argument
754 if ((!devinfo) || (devinfo->ctl_urb == NULL)) in brcmf_usb_dl_cmd()
762 devinfo->ctl_urb->transfer_buffer_length = size; in brcmf_usb_dl_cmd()
764 devinfo->ctl_read.wLength = cpu_to_le16p(&size); in brcmf_usb_dl_cmd()
765 devinfo->ctl_read.bRequestType = USB_DIR_IN | USB_TYPE_VENDOR | in brcmf_usb_dl_cmd()
767 devinfo->ctl_read.bRequest = cmd; in brcmf_usb_dl_cmd()
769 usb_fill_control_urb(devinfo->ctl_urb, in brcmf_usb_dl_cmd()
770 devinfo->usbdev, in brcmf_usb_dl_cmd()
771 usb_rcvctrlpipe(devinfo->usbdev, 0), in brcmf_usb_dl_cmd()
772 (unsigned char *) &devinfo->ctl_read, in brcmf_usb_dl_cmd()
774 (usb_complete_t)brcmf_usb_sync_complete, devinfo); in brcmf_usb_dl_cmd()
776 devinfo->ctl_completed = false; in brcmf_usb_dl_cmd()
777 ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC); in brcmf_usb_dl_cmd()
783 if (!brcmf_usb_ioctl_resp_wait(devinfo)) { in brcmf_usb_dl_cmd()
784 usb_kill_urb(devinfo->ctl_urb); in brcmf_usb_dl_cmd()
796 brcmf_usb_dlneeded(struct brcmf_usbdev_info *devinfo) in brcmf_usb_dlneeded() argument
803 if (devinfo == NULL) in brcmf_usb_dlneeded()
808 brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id)); in brcmf_usb_dlneeded()
819 brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id)); in brcmf_usb_dlneeded()
822 devinfo->bus_pub.devid = chipid; in brcmf_usb_dlneeded()
823 devinfo->bus_pub.chiprev = chiprev; in brcmf_usb_dlneeded()
829 brcmf_usb_resetcfg(struct brcmf_usbdev_info *devinfo) in brcmf_usb_resetcfg() argument
842 err = brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id)); in brcmf_usb_resetcfg()
853 brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id)); in brcmf_usb_resetcfg()
864 brcmf_usb_dl_send_bulk(struct brcmf_usbdev_info *devinfo, void *buffer, int len) in brcmf_usb_dl_send_bulk() argument
868 if ((devinfo == NULL) || (devinfo->bulk_urb == NULL)) in brcmf_usb_dl_send_bulk()
872 usb_fill_bulk_urb(devinfo->bulk_urb, devinfo->usbdev, in brcmf_usb_dl_send_bulk()
873 devinfo->tx_pipe, buffer, len, in brcmf_usb_dl_send_bulk()
874 (usb_complete_t)brcmf_usb_sync_complete, devinfo); in brcmf_usb_dl_send_bulk()
876 devinfo->bulk_urb->transfer_flags |= URB_ZERO_PACKET; in brcmf_usb_dl_send_bulk()
878 devinfo->ctl_completed = false; in brcmf_usb_dl_send_bulk()
879 ret = usb_submit_urb(devinfo->bulk_urb, GFP_ATOMIC); in brcmf_usb_dl_send_bulk()
884 ret = brcmf_usb_ioctl_resp_wait(devinfo); in brcmf_usb_dl_send_bulk()
889 brcmf_usb_dl_writeimage(struct brcmf_usbdev_info *devinfo, u8 *fw, int fwlen) in brcmf_usb_dl_writeimage() argument
906 brcmf_usb_dl_cmd(devinfo, DL_START, &state, sizeof(state)); in brcmf_usb_dl_writeimage()
940 if (brcmf_usb_dl_send_bulk(devinfo, bulkchunk, in brcmf_usb_dl_writeimage()
950 err = brcmf_usb_dl_cmd(devinfo, DL_GETSTATE, &state, in brcmf_usb_dl_writeimage()
975 static int brcmf_usb_dlstart(struct brcmf_usbdev_info *devinfo, u8 *fw, int len) in brcmf_usb_dlstart() argument
981 if (devinfo == NULL) in brcmf_usb_dlstart()
984 if (devinfo->bus_pub.devid == 0xDEAD) in brcmf_usb_dlstart()
987 err = brcmf_usb_dl_writeimage(devinfo, fw, len); in brcmf_usb_dlstart()
989 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DL_DONE; in brcmf_usb_dlstart()
991 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DL_FAIL; in brcmf_usb_dlstart()
997 static int brcmf_usb_dlrun(struct brcmf_usbdev_info *devinfo) in brcmf_usb_dlrun() argument
1002 if (!devinfo) in brcmf_usb_dlrun()
1005 if (devinfo->bus_pub.devid == 0xDEAD) in brcmf_usb_dlrun()
1010 brcmf_usb_dl_cmd(devinfo, DL_GETSTATE, &state, sizeof(state)); in brcmf_usb_dlrun()
1014 if (brcmf_usb_dl_cmd(devinfo, DL_GO, &state, sizeof(state))) in brcmf_usb_dlrun()
1016 if (brcmf_usb_resetcfg(devinfo)) in brcmf_usb_dlrun()
1028 brcmf_usb_fw_download(struct brcmf_usbdev_info *devinfo) in brcmf_usb_fw_download() argument
1034 if (!devinfo) { in brcmf_usb_fw_download()
1039 if (!devinfo->image) { in brcmf_usb_fw_download()
1045 intf = to_usb_interface(devinfo->dev); in brcmf_usb_fw_download()
1050 err = brcmf_usb_dlstart(devinfo, in brcmf_usb_fw_download()
1051 (u8 *)devinfo->image, devinfo->image_len); in brcmf_usb_fw_download()
1053 err = brcmf_usb_dlrun(devinfo); in brcmf_usb_fw_download()
1061 static void brcmf_usb_detach(struct brcmf_usbdev_info *devinfo) in brcmf_usb_detach() argument
1063 brcmf_dbg(USB, "Enter, devinfo %p\n", devinfo); in brcmf_usb_detach()
1066 brcmf_usb_free_q(&devinfo->rx_freeq); in brcmf_usb_detach()
1067 brcmf_usb_free_q(&devinfo->tx_freeq); in brcmf_usb_detach()
1069 usb_free_urb(devinfo->ctl_urb); in brcmf_usb_detach()
1070 usb_free_urb(devinfo->bulk_urb); in brcmf_usb_detach()
1072 kfree(devinfo->tx_reqs); in brcmf_usb_detach()
1073 kfree(devinfo->rx_reqs); in brcmf_usb_detach()
1075 if (devinfo->settings) in brcmf_usb_detach()
1076 brcmf_release_module_param(devinfo->settings); in brcmf_usb_detach()
1102 struct brcmf_usbdev *brcmf_usb_attach(struct brcmf_usbdev_info *devinfo, in brcmf_usb_attach() argument
1107 devinfo->bus_pub.nrxq = nrxq; in brcmf_usb_attach()
1108 devinfo->rx_low_watermark = nrxq / 2; in brcmf_usb_attach()
1109 devinfo->bus_pub.devinfo = devinfo; in brcmf_usb_attach()
1110 devinfo->bus_pub.ntxq = ntxq; in brcmf_usb_attach()
1111 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DOWN; in brcmf_usb_attach()
1114 devinfo->tx_low_watermark = ntxq / 4; in brcmf_usb_attach()
1115 devinfo->tx_high_watermark = devinfo->tx_low_watermark * 3; in brcmf_usb_attach()
1116 devinfo->bus_pub.bus_mtu = BRCMF_USB_MAX_PKT_SIZE; in brcmf_usb_attach()
1119 init_waitqueue_head(&devinfo->ioctl_resp_wait); in brcmf_usb_attach()
1122 spin_lock_init(&devinfo->qlock); in brcmf_usb_attach()
1123 spin_lock_init(&devinfo->tx_flowblock_lock); in brcmf_usb_attach()
1125 INIT_LIST_HEAD(&devinfo->rx_freeq); in brcmf_usb_attach()
1126 INIT_LIST_HEAD(&devinfo->rx_postq); in brcmf_usb_attach()
1128 INIT_LIST_HEAD(&devinfo->tx_freeq); in brcmf_usb_attach()
1129 INIT_LIST_HEAD(&devinfo->tx_postq); in brcmf_usb_attach()
1131 devinfo->tx_flowblock = false; in brcmf_usb_attach()
1133 devinfo->rx_reqs = brcmf_usbdev_qinit(&devinfo->rx_freeq, nrxq); in brcmf_usb_attach()
1134 if (!devinfo->rx_reqs) in brcmf_usb_attach()
1137 devinfo->tx_reqs = brcmf_usbdev_qinit(&devinfo->tx_freeq, ntxq); in brcmf_usb_attach()
1138 if (!devinfo->tx_reqs) in brcmf_usb_attach()
1140 devinfo->tx_freecount = ntxq; in brcmf_usb_attach()
1142 devinfo->ctl_urb = usb_alloc_urb(0, GFP_ATOMIC); in brcmf_usb_attach()
1143 if (!devinfo->ctl_urb) in brcmf_usb_attach()
1145 devinfo->bulk_urb = usb_alloc_urb(0, GFP_ATOMIC); in brcmf_usb_attach()
1146 if (!devinfo->bulk_urb) in brcmf_usb_attach()
1149 return &devinfo->bus_pub; in brcmf_usb_attach()
1153 brcmf_usb_detach(devinfo); in brcmf_usb_attach()
1179 struct brcmf_usbdev_info *devinfo = bus->bus_priv.usb->devinfo; in brcmf_usb_probe_phase2() local
1197 devinfo->image = fw->data; in brcmf_usb_probe_phase2()
1198 devinfo->image_len = fw->size; in brcmf_usb_probe_phase2()
1200 ret = brcmf_usb_fw_download(devinfo); in brcmf_usb_probe_phase2()
1205 ret = brcmf_alloc(devinfo->dev, devinfo->settings); in brcmf_usb_probe_phase2()
1210 ret = brcmf_attach(devinfo->dev); in brcmf_usb_probe_phase2()
1214 complete(&devinfo->dev_init_done); in brcmf_usb_probe_phase2()
1218 complete(&devinfo->dev_init_done); in brcmf_usb_probe_phase2()
1223 brcmf_usb_prepare_fw_request(struct brcmf_usbdev_info *devinfo) in brcmf_usb_prepare_fw_request() argument
1227 { ".bin", devinfo->fw_name }, in brcmf_usb_prepare_fw_request()
1230 fwreq = brcmf_fw_alloc_request(devinfo->bus_pub.devid, in brcmf_usb_prepare_fw_request()
1231 devinfo->bus_pub.chiprev, in brcmf_usb_prepare_fw_request()
1243 static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo, in brcmf_usb_probe_cb() argument
1248 struct device *dev = devinfo->dev; in brcmf_usb_probe_cb()
1253 bus_pub = brcmf_usb_attach(devinfo, BRCMF_USB_NRXQ, BRCMF_USB_NTXQ); in brcmf_usb_probe_cb()
1275 devinfo->settings = brcmf_get_module_param(bus->dev, BRCMF_BUSTYPE_USB, in brcmf_usb_probe_cb()
1278 if (!devinfo->settings) { in brcmf_usb_probe_cb()
1283 if (!brcmf_usb_dlneeded(devinfo)) { in brcmf_usb_probe_cb()
1284 ret = brcmf_alloc(devinfo->dev, devinfo->settings); in brcmf_usb_probe_cb()
1287 ret = brcmf_attach(devinfo->dev); in brcmf_usb_probe_cb()
1291 complete(&devinfo->dev_init_done); in brcmf_usb_probe_cb()
1297 fwreq = brcmf_usb_prepare_fw_request(devinfo); in brcmf_usb_probe_cb()
1315 brcmf_free(devinfo->dev); in brcmf_usb_probe_cb()
1317 brcmf_usb_detach(devinfo); in brcmf_usb_probe_cb()
1322 brcmf_usb_disconnect_cb(struct brcmf_usbdev_info *devinfo) in brcmf_usb_disconnect_cb() argument
1324 if (!devinfo) in brcmf_usb_disconnect_cb()
1326 brcmf_dbg(USB, "Enter, bus_pub %p\n", devinfo); in brcmf_usb_disconnect_cb()
1328 brcmf_detach(devinfo->dev); in brcmf_usb_disconnect_cb()
1329 brcmf_free(devinfo->dev); in brcmf_usb_disconnect_cb()
1330 kfree(devinfo->bus_pub.bus); in brcmf_usb_disconnect_cb()
1331 brcmf_usb_detach(devinfo); in brcmf_usb_disconnect_cb()
1338 struct brcmf_usbdev_info *devinfo; in brcmf_usb_probe() local
1347 devinfo = kzalloc(sizeof(*devinfo), GFP_ATOMIC); in brcmf_usb_probe()
1348 if (devinfo == NULL) in brcmf_usb_probe()
1351 devinfo->usbdev = usb; in brcmf_usb_probe()
1352 devinfo->dev = &usb->dev; in brcmf_usb_probe()
1356 init_completion(&devinfo->dev_init_done); in brcmf_usb_probe()
1358 usb_set_intfdata(intf, devinfo); in brcmf_usb_probe()
1397 if (!devinfo->rx_pipe) in brcmf_usb_probe()
1398 devinfo->rx_pipe = in brcmf_usb_probe()
1401 if (!devinfo->tx_pipe) in brcmf_usb_probe()
1402 devinfo->tx_pipe = in brcmf_usb_probe()
1406 if (devinfo->rx_pipe == 0) { in brcmf_usb_probe()
1411 if (devinfo->tx_pipe == 0) { in brcmf_usb_probe()
1417 devinfo->ifnum = desc->bInterfaceNumber; in brcmf_usb_probe()
1428 ret = brcmf_usb_probe_cb(devinfo, id->driver_info); in brcmf_usb_probe()
1436 complete(&devinfo->dev_init_done); in brcmf_usb_probe()
1437 kfree(devinfo); in brcmf_usb_probe()
1445 struct brcmf_usbdev_info *devinfo; in brcmf_usb_disconnect() local
1448 devinfo = (struct brcmf_usbdev_info *)usb_get_intfdata(intf); in brcmf_usb_disconnect()
1450 if (devinfo) { in brcmf_usb_disconnect()
1451 wait_for_completion(&devinfo->dev_init_done); in brcmf_usb_disconnect()
1458 brcmf_usb_disconnect_cb(devinfo); in brcmf_usb_disconnect()
1459 kfree(devinfo); in brcmf_usb_disconnect()
1471 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev); in brcmf_usb_suspend() local
1474 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_SLEEP; in brcmf_usb_suspend()
1475 brcmf_cancel_all_urbs(devinfo); in brcmf_usb_suspend()
1476 device_set_wakeup_enable(devinfo->dev, true); in brcmf_usb_suspend()
1486 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev); in brcmf_usb_resume() local
1490 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_UP; in brcmf_usb_resume()
1491 brcmf_usb_rx_fill_all(devinfo); in brcmf_usb_resume()
1492 device_set_wakeup_enable(devinfo->dev, false); in brcmf_usb_resume()
1499 struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev); in brcmf_usb_reset_resume() local
1505 fwreq = brcmf_usb_prepare_fw_request(devinfo); in brcmf_usb_reset_resume()