Lines Matching refs:cardp

45 static int if_usb_prog_firmware(struct if_usb_card *cardp);
48 static int usb_tx_block(struct if_usb_card *cardp, uint8_t *payload,
50 static void if_usb_free(struct if_usb_card *cardp);
51 static int if_usb_submit_rx_urb(struct if_usb_card *cardp);
52 static int if_usb_reset_device(struct if_usb_card *cardp);
76 static void if_usb_free(struct if_usb_card *cardp) in if_usb_free() argument
81 usb_kill_urb(cardp->tx_urb); in if_usb_free()
82 usb_kill_urb(cardp->rx_urb); in if_usb_free()
83 usb_kill_urb(cardp->cmd_urb); in if_usb_free()
85 usb_free_urb(cardp->tx_urb); in if_usb_free()
86 cardp->tx_urb = NULL; in if_usb_free()
88 usb_free_urb(cardp->rx_urb); in if_usb_free()
89 cardp->rx_urb = NULL; in if_usb_free()
91 usb_free_urb(cardp->cmd_urb); in if_usb_free()
92 cardp->cmd_urb = NULL; in if_usb_free()
94 kfree(cardp->ep_out_buf); in if_usb_free()
95 cardp->ep_out_buf = NULL; in if_usb_free()
102 struct if_usb_card *cardp = priv->card; in if_usb_setup_firmware() local
107 if_usb_submit_rx_urb(cardp); in if_usb_setup_firmware()
110 b2_cmd.version = cardp->boot2_version; in if_usb_setup_firmware()
120 struct if_usb_card *cardp = (void *)priv; in if_usb_fw_timeo() local
123 if (!cardp->fwdnldover) { in if_usb_fw_timeo()
125 cardp->priv->surpriseremoved = 1; in if_usb_fw_timeo()
130 wake_up(&cardp->fw_wq); in if_usb_fw_timeo()
149 struct if_usb_card *cardp; in if_usb_probe() local
155 cardp = kzalloc(sizeof(struct if_usb_card), GFP_KERNEL); in if_usb_probe()
156 if (!cardp) in if_usb_probe()
159 setup_timer(&cardp->fw_timeout, if_usb_fw_timeo, (unsigned long)cardp); in if_usb_probe()
160 init_waitqueue_head(&cardp->fw_wq); in if_usb_probe()
162 cardp->udev = udev; in if_usb_probe()
175 cardp->ep_in_size = in if_usb_probe()
177 cardp->ep_in = usb_endpoint_num(endpoint); in if_usb_probe()
180 cardp->ep_in); in if_usb_probe()
182 cardp->ep_in_size); in if_usb_probe()
184 cardp->ep_out_size = in if_usb_probe()
186 cardp->ep_out = usb_endpoint_num(endpoint); in if_usb_probe()
189 cardp->ep_out); in if_usb_probe()
191 cardp->ep_out_size); in if_usb_probe()
194 if (!cardp->ep_out_size || !cardp->ep_in_size) { in if_usb_probe()
200 cardp->rx_urb = usb_alloc_urb(0, GFP_KERNEL); in if_usb_probe()
201 if (!cardp->rx_urb) { in if_usb_probe()
206 cardp->tx_urb = usb_alloc_urb(0, GFP_KERNEL); in if_usb_probe()
207 if (!cardp->tx_urb) { in if_usb_probe()
212 cardp->cmd_urb = usb_alloc_urb(0, GFP_KERNEL); in if_usb_probe()
213 if (!cardp->cmd_urb) { in if_usb_probe()
218 cardp->ep_out_buf = kmalloc(MRVDRV_ETH_TX_PACKET_BUFFER_SIZE, in if_usb_probe()
220 if (!cardp->ep_out_buf) { in if_usb_probe()
225 priv = lbtf_add_card(cardp, &udev->dev); in if_usb_probe()
229 cardp->priv = priv; in if_usb_probe()
234 cardp->boot2_version = udev->descriptor.bcdDevice; in if_usb_probe()
237 usb_set_intfdata(intf, cardp); in if_usb_probe()
242 if_usb_free(cardp); in if_usb_probe()
255 struct if_usb_card *cardp = usb_get_intfdata(intf); in if_usb_disconnect() local
256 struct lbtf_private *priv = cardp->priv; in if_usb_disconnect()
260 if_usb_reset_device(cardp); in if_usb_disconnect()
266 if_usb_free(cardp); in if_usb_disconnect()
281 static int if_usb_send_fw_pkt(struct if_usb_card *cardp) in if_usb_send_fw_pkt() argument
283 struct fwdata *fwdata = cardp->ep_out_buf; in if_usb_send_fw_pkt()
284 u8 *firmware = (u8 *) cardp->fw->data; in if_usb_send_fw_pkt()
290 if (!cardp->CRC_OK) { in if_usb_send_fw_pkt()
291 cardp->totalbytes = cardp->fwlastblksent; in if_usb_send_fw_pkt()
292 cardp->fwseqnum--; in if_usb_send_fw_pkt()
295 lbtf_deb_usb2(&cardp->udev->dev, "totalbytes = %d\n", in if_usb_send_fw_pkt()
296 cardp->totalbytes); in if_usb_send_fw_pkt()
302 memcpy(&fwdata->hdr, &firmware[cardp->totalbytes], in if_usb_send_fw_pkt()
305 cardp->fwlastblksent = cardp->totalbytes; in if_usb_send_fw_pkt()
306 cardp->totalbytes += sizeof(struct fwheader); in if_usb_send_fw_pkt()
308 memcpy(fwdata->data, &firmware[cardp->totalbytes], in if_usb_send_fw_pkt()
311 lbtf_deb_usb2(&cardp->udev->dev, "Data length = %d\n", in if_usb_send_fw_pkt()
314 fwdata->seqnum = cpu_to_le32(++cardp->fwseqnum); in if_usb_send_fw_pkt()
315 cardp->totalbytes += le32_to_cpu(fwdata->hdr.datalength); in if_usb_send_fw_pkt()
317 usb_tx_block(cardp, cardp->ep_out_buf, sizeof(struct fwdata) + in if_usb_send_fw_pkt()
321 lbtf_deb_usb2(&cardp->udev->dev, "There are data to follow\n"); in if_usb_send_fw_pkt()
322 lbtf_deb_usb2(&cardp->udev->dev, in if_usb_send_fw_pkt()
324 cardp->fwseqnum, cardp->totalbytes); in if_usb_send_fw_pkt()
326 lbtf_deb_usb2(&cardp->udev->dev, in if_usb_send_fw_pkt()
328 lbtf_deb_usb2(&cardp->udev->dev, "Donwloading FW JUMP BLOCK\n"); in if_usb_send_fw_pkt()
333 cardp->fwfinalblk = 1; in if_usb_send_fw_pkt()
336 lbtf_deb_usb2(&cardp->udev->dev, "Firmware download done; size %d\n", in if_usb_send_fw_pkt()
337 cardp->totalbytes); in if_usb_send_fw_pkt()
343 static int if_usb_reset_device(struct if_usb_card *cardp) in if_usb_reset_device() argument
345 struct cmd_ds_802_11_reset *cmd = cardp->ep_out_buf + 4; in if_usb_reset_device()
350 *(__le32 *)cardp->ep_out_buf = cpu_to_le32(CMD_TYPE_REQUEST); in if_usb_reset_device()
357 usb_tx_block(cardp, cardp->ep_out_buf, in if_usb_reset_device()
361 ret = usb_reset_device(cardp->udev); in if_usb_reset_device()
379 static int usb_tx_block(struct if_usb_card *cardp, uint8_t *payload, in usb_tx_block() argument
387 if (cardp->priv->surpriseremoved) { in usb_tx_block()
388 lbtf_deb_usbd(&cardp->udev->dev, "Device removed\n"); in usb_tx_block()
393 urb = cardp->tx_urb; in usb_tx_block()
395 urb = cardp->cmd_urb; in usb_tx_block()
397 usb_fill_bulk_urb(urb, cardp->udev, in usb_tx_block()
398 usb_sndbulkpipe(cardp->udev, in usb_tx_block()
399 cardp->ep_out), in usb_tx_block()
400 payload, nb, if_usb_write_bulk_callback, cardp); in usb_tx_block()
405 lbtf_deb_usbd(&cardp->udev->dev, in usb_tx_block()
410 lbtf_deb_usb2(&cardp->udev->dev, "usb_submit_urb success\n"); in usb_tx_block()
419 static int __if_usb_submit_rx_urb(struct if_usb_card *cardp, in __if_usb_submit_rx_urb() argument
434 cardp->rx_skb = skb; in __if_usb_submit_rx_urb()
437 usb_fill_bulk_urb(cardp->rx_urb, cardp->udev, in __if_usb_submit_rx_urb()
438 usb_rcvbulkpipe(cardp->udev, cardp->ep_in), in __if_usb_submit_rx_urb()
440 MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn, cardp); in __if_usb_submit_rx_urb()
442 cardp->rx_urb->transfer_flags |= URB_ZERO_PACKET; in __if_usb_submit_rx_urb()
444 lbtf_deb_usb2(&cardp->udev->dev, "Pointer for rx_urb %p\n", in __if_usb_submit_rx_urb()
445 cardp->rx_urb); in __if_usb_submit_rx_urb()
446 ret = usb_submit_urb(cardp->rx_urb, GFP_ATOMIC); in __if_usb_submit_rx_urb()
448 lbtf_deb_usbd(&cardp->udev->dev, in __if_usb_submit_rx_urb()
451 cardp->rx_skb = NULL; in __if_usb_submit_rx_urb()
455 lbtf_deb_usb2(&cardp->udev->dev, "Submit Rx URB success\n"); in __if_usb_submit_rx_urb()
461 static int if_usb_submit_rx_urb_fwload(struct if_usb_card *cardp) in if_usb_submit_rx_urb_fwload() argument
463 return __if_usb_submit_rx_urb(cardp, &if_usb_receive_fwload); in if_usb_submit_rx_urb_fwload()
466 static int if_usb_submit_rx_urb(struct if_usb_card *cardp) in if_usb_submit_rx_urb() argument
468 return __if_usb_submit_rx_urb(cardp, &if_usb_receive); in if_usb_submit_rx_urb()
473 struct if_usb_card *cardp = urb->context; in if_usb_receive_fwload() local
474 struct sk_buff *skb = cardp->rx_skb; in if_usb_receive_fwload()
480 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
487 if (cardp->fwdnldover) { in if_usb_receive_fwload()
494 wake_up(&cardp->fw_wq); in if_usb_receive_fwload()
498 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
504 if (cardp->bootcmdresp <= 0) { in if_usb_receive_fwload()
507 if (le16_to_cpu(cardp->udev->descriptor.bcdDevice) < 0x3106) { in if_usb_receive_fwload()
509 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
510 cardp->bootcmdresp = 1; in if_usb_receive_fwload()
512 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
521 if (!cardp->bootcmdresp) in if_usb_receive_fwload()
523 cardp->bootcmdresp = -1; in if_usb_receive_fwload()
535 cardp->bootcmdresp = 1; in if_usb_receive_fwload()
536 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
541 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
549 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
557 lbtf_deb_usb2(&cardp->udev->dev, in if_usb_receive_fwload()
559 lbtf_deb_usb2(&cardp->udev->dev, in if_usb_receive_fwload()
562 cardp->CRC_OK = 1; in if_usb_receive_fwload()
564 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
566 cardp->CRC_OK = 0; in if_usb_receive_fwload()
572 mod_timer(&cardp->fw_timeout, jiffies + (HZ/5)); in if_usb_receive_fwload()
574 if (cardp->fwfinalblk) { in if_usb_receive_fwload()
575 cardp->fwdnldover = 1; in if_usb_receive_fwload()
579 if_usb_send_fw_pkt(cardp); in if_usb_receive_fwload()
582 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
592 struct if_usb_card *cardp, in process_cmdtypedata() argument
597 lbtf_deb_usbd(&cardp->udev->dev, "Packet length is Invalid\n"); in process_cmdtypedata()
609 struct if_usb_card *cardp, in process_cmdrequest() argument
613 lbtf_deb_usbd(&cardp->udev->dev, in process_cmdrequest()
636 struct if_usb_card *cardp = urb->context; in if_usb_receive() local
637 struct sk_buff *skb = cardp->rx_skb; in if_usb_receive()
638 struct lbtf_private *priv = cardp->priv; in if_usb_receive()
648 lbtf_deb_usbd(&cardp->udev->dev, "RX URB failed: %d\n", in if_usb_receive()
656 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive()
667 process_cmdtypedata(recvlength, skb, cardp, priv); in if_usb_receive()
671 process_cmdrequest(recvlength, recvbuff, skb, cardp, priv); in if_usb_receive()
678 lbtf_deb_usbd(&cardp->udev->dev, "**EVENT** 0x%X\n", in if_usb_receive()
694 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive()
701 lbtf_deb_usbd(&cardp->udev->dev, in if_usb_receive()
708 if_usb_submit_rx_urb(cardp); in if_usb_receive()
725 struct if_usb_card *cardp = priv->card; in if_usb_host_to_card() local
728 lbtf_deb_usbd(&cardp->udev->dev, "*** type = %u\n", type); in if_usb_host_to_card()
729 lbtf_deb_usbd(&cardp->udev->dev, "size after = %d\n", nb); in if_usb_host_to_card()
732 *(__le32 *)cardp->ep_out_buf = cpu_to_le32(CMD_TYPE_REQUEST); in if_usb_host_to_card()
734 *(__le32 *)cardp->ep_out_buf = cpu_to_le32(CMD_TYPE_DATA); in if_usb_host_to_card()
738 memcpy((cardp->ep_out_buf + MESSAGE_HEADER_LEN), payload, nb); in if_usb_host_to_card()
740 return usb_tx_block(cardp, cardp->ep_out_buf, nb + MESSAGE_HEADER_LEN, in if_usb_host_to_card()
751 static int if_usb_issue_boot_command(struct if_usb_card *cardp, int ivalue) in if_usb_issue_boot_command() argument
753 struct bootcmd *bootcmd = cardp->ep_out_buf; in if_usb_issue_boot_command()
761 usb_tx_block(cardp, cardp->ep_out_buf, sizeof(*bootcmd), 0); in if_usb_issue_boot_command()
816 static int if_usb_prog_firmware(struct if_usb_card *cardp) in if_usb_prog_firmware() argument
825 ret = request_firmware(&cardp->fw, lbtf_fw_name, &cardp->udev->dev); in if_usb_prog_firmware()
834 if (check_fwfile_format(cardp->fw->data, cardp->fw->size)) in if_usb_prog_firmware()
838 if (if_usb_submit_rx_urb_fwload(cardp) < 0) { in if_usb_prog_firmware()
839 lbtf_deb_usbd(&cardp->udev->dev, "URB submission is failed\n"); in if_usb_prog_firmware()
844 cardp->bootcmdresp = 0; in if_usb_prog_firmware()
849 if_usb_issue_boot_command(cardp, BOOT_CMD_FW_BY_USB); in if_usb_prog_firmware()
854 } while (cardp->bootcmdresp == 0 && j < 10); in if_usb_prog_firmware()
855 } while (cardp->bootcmdresp == 0 && i < 5); in if_usb_prog_firmware()
857 if (cardp->bootcmdresp <= 0) { in if_usb_prog_firmware()
859 if_usb_reset_device(cardp); in if_usb_prog_firmware()
867 cardp->totalbytes = 0; in if_usb_prog_firmware()
868 cardp->fwlastblksent = 0; in if_usb_prog_firmware()
869 cardp->CRC_OK = 1; in if_usb_prog_firmware()
870 cardp->fwdnldover = 0; in if_usb_prog_firmware()
871 cardp->fwseqnum = -1; in if_usb_prog_firmware()
872 cardp->totalbytes = 0; in if_usb_prog_firmware()
873 cardp->fwfinalblk = 0; in if_usb_prog_firmware()
876 if_usb_send_fw_pkt(cardp); in if_usb_prog_firmware()
879 wait_event_interruptible(cardp->fw_wq, cardp->priv->surpriseremoved || in if_usb_prog_firmware()
880 cardp->fwdnldover); in if_usb_prog_firmware()
882 del_timer_sync(&cardp->fw_timeout); in if_usb_prog_firmware()
883 usb_kill_urb(cardp->rx_urb); in if_usb_prog_firmware()
885 if (!cardp->fwdnldover) { in if_usb_prog_firmware()
888 if_usb_reset_device(cardp); in if_usb_prog_firmware()
897 cardp->priv->fw_ready = 1; in if_usb_prog_firmware()
900 release_firmware(cardp->fw); in if_usb_prog_firmware()
901 cardp->fw = NULL; in if_usb_prog_firmware()
903 if_usb_setup_firmware(cardp->priv); in if_usb_prog_firmware()