Lines Matching refs:cardp

71 static int usb_tx_block(struct if_usb_card *cardp, uint8_t *payload,
73 static void if_usb_free(struct if_usb_card *cardp);
74 static int if_usb_submit_rx_urb(struct if_usb_card *cardp);
75 static int if_usb_reset_device(struct if_usb_card *cardp);
85 struct if_usb_card *cardp = (struct if_usb_card *) urb->context; in if_usb_write_bulk_callback() local
90 struct lbs_private *priv = cardp->priv; in if_usb_write_bulk_callback()
112 static void if_usb_free(struct if_usb_card *cardp) in if_usb_free() argument
117 usb_kill_urb(cardp->tx_urb); in if_usb_free()
118 usb_kill_urb(cardp->rx_urb); in if_usb_free()
120 usb_free_urb(cardp->tx_urb); in if_usb_free()
121 cardp->tx_urb = NULL; in if_usb_free()
123 usb_free_urb(cardp->rx_urb); in if_usb_free()
124 cardp->rx_urb = NULL; in if_usb_free()
126 kfree(cardp->ep_out_buf); in if_usb_free()
127 cardp->ep_out_buf = NULL; in if_usb_free()
134 struct if_usb_card *cardp = priv->card; in if_usb_setup_firmware() local
140 b2_cmd.version = cardp->boot2_version; in if_usb_setup_firmware()
170 struct if_usb_card *cardp = (void *)priv; in if_usb_fw_timeo() local
172 if (cardp->fwdnldover) { in if_usb_fw_timeo()
176 cardp->surprise_removed = 1; in if_usb_fw_timeo()
178 wake_up(&cardp->fw_wq); in if_usb_fw_timeo()
202 struct if_usb_card *cardp; in if_usb_probe() local
208 cardp = kzalloc(sizeof(struct if_usb_card), GFP_KERNEL); in if_usb_probe()
209 if (!cardp) in if_usb_probe()
212 setup_timer(&cardp->fw_timeout, if_usb_fw_timeo, (unsigned long)cardp); in if_usb_probe()
213 init_waitqueue_head(&cardp->fw_wq); in if_usb_probe()
215 cardp->udev = udev; in if_usb_probe()
216 cardp->model = (uint32_t) id->driver_info; in if_usb_probe()
229 cardp->ep_in_size = le16_to_cpu(endpoint->wMaxPacketSize); in if_usb_probe()
230 cardp->ep_in = usb_endpoint_num(endpoint); in if_usb_probe()
232 lbs_deb_usbd(&udev->dev, "in_endpoint = %d\n", cardp->ep_in); in if_usb_probe()
233 lbs_deb_usbd(&udev->dev, "Bulk in size is %d\n", cardp->ep_in_size); in if_usb_probe()
236 cardp->ep_out_size = le16_to_cpu(endpoint->wMaxPacketSize); in if_usb_probe()
237 cardp->ep_out = usb_endpoint_num(endpoint); in if_usb_probe()
239 lbs_deb_usbd(&udev->dev, "out_endpoint = %d\n", cardp->ep_out); in if_usb_probe()
240 lbs_deb_usbd(&udev->dev, "Bulk out size is %d\n", cardp->ep_out_size); in if_usb_probe()
243 if (!cardp->ep_out_size || !cardp->ep_in_size) { in if_usb_probe()
247 if (!(cardp->rx_urb = usb_alloc_urb(0, GFP_KERNEL))) { in if_usb_probe()
251 if (!(cardp->tx_urb = usb_alloc_urb(0, GFP_KERNEL))) { in if_usb_probe()
255 cardp->ep_out_buf = kmalloc(MRVDRV_ETH_TX_PACKET_BUFFER_SIZE, GFP_KERNEL); in if_usb_probe()
256 if (!cardp->ep_out_buf) { in if_usb_probe()
261 if (!(priv = lbs_add_card(cardp, &intf->dev))) in if_usb_probe()
264 cardp->priv = priv; in if_usb_probe()
275 cardp->boot2_version = udev->descriptor.bcdDevice; in if_usb_probe()
278 usb_set_intfdata(intf, cardp); in if_usb_probe()
280 r = lbs_get_firmware_async(priv, &udev->dev, cardp->model, in if_usb_probe()
290 if_usb_reset_device(cardp); in if_usb_probe()
292 if_usb_free(cardp); in if_usb_probe()
305 struct if_usb_card *cardp = usb_get_intfdata(intf); in if_usb_disconnect() local
306 struct lbs_private *priv = cardp->priv; in if_usb_disconnect()
310 cardp->surprise_removed = 1; in if_usb_disconnect()
318 if_usb_free(cardp); in if_usb_disconnect()
331 static int if_usb_send_fw_pkt(struct if_usb_card *cardp) in if_usb_send_fw_pkt() argument
333 struct fwdata *fwdata = cardp->ep_out_buf; in if_usb_send_fw_pkt()
334 const uint8_t *firmware = cardp->fw->data; in if_usb_send_fw_pkt()
338 if (!cardp->CRC_OK) { in if_usb_send_fw_pkt()
339 cardp->totalbytes = cardp->fwlastblksent; in if_usb_send_fw_pkt()
340 cardp->fwseqnum--; in if_usb_send_fw_pkt()
343 lbs_deb_usb2(&cardp->udev->dev, "totalbytes = %d\n", in if_usb_send_fw_pkt()
344 cardp->totalbytes); in if_usb_send_fw_pkt()
350 memcpy(&fwdata->hdr, &firmware[cardp->totalbytes], in if_usb_send_fw_pkt()
353 cardp->fwlastblksent = cardp->totalbytes; in if_usb_send_fw_pkt()
354 cardp->totalbytes += sizeof(struct fwheader); in if_usb_send_fw_pkt()
356 memcpy(fwdata->data, &firmware[cardp->totalbytes], in if_usb_send_fw_pkt()
359 lbs_deb_usb2(&cardp->udev->dev, "Data length = %d\n", in if_usb_send_fw_pkt()
362 fwdata->seqnum = cpu_to_le32(++cardp->fwseqnum); in if_usb_send_fw_pkt()
363 cardp->totalbytes += le32_to_cpu(fwdata->hdr.datalength); in if_usb_send_fw_pkt()
365 usb_tx_block(cardp, cardp->ep_out_buf, sizeof(struct fwdata) + in if_usb_send_fw_pkt()
369 lbs_deb_usb2(&cardp->udev->dev, "There are data to follow\n"); in if_usb_send_fw_pkt()
370 lbs_deb_usb2(&cardp->udev->dev, "seqnum = %d totalbytes = %d\n", in if_usb_send_fw_pkt()
371 cardp->fwseqnum, cardp->totalbytes); in if_usb_send_fw_pkt()
373 lbs_deb_usb2(&cardp->udev->dev, "Host has finished FW downloading\n"); in if_usb_send_fw_pkt()
374 lbs_deb_usb2(&cardp->udev->dev, "Donwloading FW JUMP BLOCK\n"); in if_usb_send_fw_pkt()
376 cardp->fwfinalblk = 1; in if_usb_send_fw_pkt()
379 lbs_deb_usb2(&cardp->udev->dev, "Firmware download done; size %d\n", in if_usb_send_fw_pkt()
380 cardp->totalbytes); in if_usb_send_fw_pkt()
385 static int if_usb_reset_device(struct if_usb_card *cardp) in if_usb_reset_device() argument
387 struct cmd_header *cmd = cardp->ep_out_buf + 4; in if_usb_reset_device()
392 *(__le32 *)cardp->ep_out_buf = cpu_to_le32(CMD_TYPE_REQUEST); in if_usb_reset_device()
398 usb_tx_block(cardp, cardp->ep_out_buf, 4 + sizeof(struct cmd_header)); in if_usb_reset_device()
401 ret = usb_reset_device(cardp->udev); in if_usb_reset_device()
421 static int usb_tx_block(struct if_usb_card *cardp, uint8_t *payload, uint16_t nb) in usb_tx_block() argument
426 if (cardp->surprise_removed) { in usb_tx_block()
427 lbs_deb_usbd(&cardp->udev->dev, "Device removed\n"); in usb_tx_block()
432 usb_fill_bulk_urb(cardp->tx_urb, cardp->udev, in usb_tx_block()
433 usb_sndbulkpipe(cardp->udev, in usb_tx_block()
434 cardp->ep_out), in usb_tx_block()
435 payload, nb, if_usb_write_bulk_callback, cardp); in usb_tx_block()
437 cardp->tx_urb->transfer_flags |= URB_ZERO_PACKET; in usb_tx_block()
439 if ((ret = usb_submit_urb(cardp->tx_urb, GFP_ATOMIC))) { in usb_tx_block()
440 lbs_deb_usbd(&cardp->udev->dev, "usb_submit_urb failed: %d\n", ret); in usb_tx_block()
442 lbs_deb_usb2(&cardp->udev->dev, "usb_submit_urb success\n"); in usb_tx_block()
450 static int __if_usb_submit_rx_urb(struct if_usb_card *cardp, in __if_usb_submit_rx_urb() argument
461 cardp->rx_skb = skb; in __if_usb_submit_rx_urb()
464 usb_fill_bulk_urb(cardp->rx_urb, cardp->udev, in __if_usb_submit_rx_urb()
465 usb_rcvbulkpipe(cardp->udev, cardp->ep_in), in __if_usb_submit_rx_urb()
468 cardp); in __if_usb_submit_rx_urb()
470 cardp->rx_urb->transfer_flags |= URB_ZERO_PACKET; in __if_usb_submit_rx_urb()
472 lbs_deb_usb2(&cardp->udev->dev, "Pointer for rx_urb %p\n", cardp->rx_urb); in __if_usb_submit_rx_urb()
473 if ((ret = usb_submit_urb(cardp->rx_urb, GFP_ATOMIC))) { in __if_usb_submit_rx_urb()
474 lbs_deb_usbd(&cardp->udev->dev, "Submit Rx URB failed: %d\n", ret); in __if_usb_submit_rx_urb()
476 cardp->rx_skb = NULL; in __if_usb_submit_rx_urb()
479 lbs_deb_usb2(&cardp->udev->dev, "Submit Rx URB success\n"); in __if_usb_submit_rx_urb()
487 static int if_usb_submit_rx_urb_fwload(struct if_usb_card *cardp) in if_usb_submit_rx_urb_fwload() argument
489 return __if_usb_submit_rx_urb(cardp, &if_usb_receive_fwload); in if_usb_submit_rx_urb_fwload()
492 static int if_usb_submit_rx_urb(struct if_usb_card *cardp) in if_usb_submit_rx_urb() argument
494 return __if_usb_submit_rx_urb(cardp, &if_usb_receive); in if_usb_submit_rx_urb()
499 struct if_usb_card *cardp = urb->context; in if_usb_receive_fwload() local
500 struct sk_buff *skb = cardp->rx_skb; in if_usb_receive_fwload()
505 lbs_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
511 if (cardp->fwdnldover) { in if_usb_receive_fwload()
517 wake_up(&cardp->fw_wq); in if_usb_receive_fwload()
521 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
526 if (cardp->bootcmdresp <= 0) { in if_usb_receive_fwload()
530 if (le16_to_cpu(cardp->udev->descriptor.bcdDevice) < 0x3106) { in if_usb_receive_fwload()
532 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
533 cardp->bootcmdresp = BOOT_CMD_RESP_OK; in if_usb_receive_fwload()
534 lbs_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
542 if (!cardp->bootcmdresp) in if_usb_receive_fwload()
544 cardp->bootcmdresp = -1; in if_usb_receive_fwload()
558 cardp->bootcmdresp = 1; in if_usb_receive_fwload()
559 lbs_deb_usbd(&cardp->udev->dev, in if_usb_receive_fwload()
563 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
570 lbs_deb_usbd(&cardp->udev->dev, "Failure to allocate syncfwheader\n"); in if_usb_receive_fwload()
576 lbs_deb_usb2(&cardp->udev->dev, "FW received Blk with correct CRC\n"); in if_usb_receive_fwload()
577 lbs_deb_usb2(&cardp->udev->dev, "FW received Blk seqnum = %d\n", in if_usb_receive_fwload()
579 cardp->CRC_OK = 1; in if_usb_receive_fwload()
581 lbs_deb_usbd(&cardp->udev->dev, "FW received Blk with CRC error\n"); in if_usb_receive_fwload()
582 cardp->CRC_OK = 0; in if_usb_receive_fwload()
588 mod_timer(&cardp->fw_timeout, jiffies + (HZ*5)); in if_usb_receive_fwload()
590 if (cardp->fwfinalblk) { in if_usb_receive_fwload()
591 cardp->fwdnldover = 1; in if_usb_receive_fwload()
595 if_usb_send_fw_pkt(cardp); in if_usb_receive_fwload()
598 if_usb_submit_rx_urb_fwload(cardp); in if_usb_receive_fwload()
606 struct if_usb_card *cardp, in process_cmdtypedata() argument
611 lbs_deb_usbd(&cardp->udev->dev, "Packet length is Invalid\n"); in process_cmdtypedata()
625 struct if_usb_card *cardp, in process_cmdrequest() argument
631 lbs_deb_usbd(&cardp->udev->dev, in process_cmdrequest()
651 lbs_deb_usbd(&cardp->udev->dev, in process_cmdrequest()
664 struct if_usb_card *cardp = urb->context; in if_usb_receive() local
665 struct sk_buff *skb = cardp->rx_skb; in if_usb_receive()
666 struct lbs_private *priv = cardp->priv; in if_usb_receive()
677 lbs_deb_usbd(&cardp->udev->dev, "RX URB failed: %d\n", in if_usb_receive()
685 lbs_deb_usbd(&cardp->udev->dev, in if_usb_receive()
695 process_cmdtypedata(recvlength, skb, cardp, priv); in if_usb_receive()
699 process_cmdrequest(recvlength, recvbuff, skb, cardp, priv); in if_usb_receive()
705 lbs_deb_usbd(&cardp->udev->dev, "**EVENT** 0x%X\n", event); in if_usb_receive()
718 lbs_deb_usbd(&cardp->udev->dev, "Unknown command type 0x%X\n", in if_usb_receive()
725 if_usb_submit_rx_urb(cardp); in if_usb_receive()
741 struct if_usb_card *cardp = priv->card; in if_usb_host_to_card() local
743 lbs_deb_usbd(&cardp->udev->dev,"*** type = %u\n", type); in if_usb_host_to_card()
744 lbs_deb_usbd(&cardp->udev->dev,"size after = %d\n", nb); in if_usb_host_to_card()
747 *(__le32 *)cardp->ep_out_buf = cpu_to_le32(CMD_TYPE_REQUEST); in if_usb_host_to_card()
750 *(__le32 *)cardp->ep_out_buf = cpu_to_le32(CMD_TYPE_DATA); in if_usb_host_to_card()
754 memcpy((cardp->ep_out_buf + MESSAGE_HEADER_LEN), payload, nb); in if_usb_host_to_card()
756 return usb_tx_block(cardp, cardp->ep_out_buf, nb + MESSAGE_HEADER_LEN); in if_usb_host_to_card()
766 static int if_usb_issue_boot_command(struct if_usb_card *cardp, int ivalue) in if_usb_issue_boot_command() argument
768 struct bootcmd *bootcmd = cardp->ep_out_buf; in if_usb_issue_boot_command()
776 usb_tx_block(cardp, cardp->ep_out_buf, sizeof(*bootcmd)); in if_usb_issue_boot_command()
833 struct if_usb_card *cardp = priv->card; in if_usb_prog_firmware() local
844 cardp->fw = fw; in if_usb_prog_firmware()
845 if (check_fwfile_format(cardp->fw->data, cardp->fw->size)) { in if_usb_prog_firmware()
851 usb_kill_urb(cardp->rx_urb); in if_usb_prog_firmware()
852 usb_kill_urb(cardp->tx_urb); in if_usb_prog_firmware()
854 cardp->fwlastblksent = 0; in if_usb_prog_firmware()
855 cardp->fwdnldover = 0; in if_usb_prog_firmware()
856 cardp->totalbytes = 0; in if_usb_prog_firmware()
857 cardp->fwfinalblk = 0; in if_usb_prog_firmware()
858 cardp->bootcmdresp = 0; in if_usb_prog_firmware()
861 if (if_usb_submit_rx_urb_fwload(cardp) < 0) { in if_usb_prog_firmware()
862 lbs_deb_usbd(&cardp->udev->dev, "URB submission is failed\n"); in if_usb_prog_firmware()
867 cardp->bootcmdresp = 0; in if_usb_prog_firmware()
871 if_usb_issue_boot_command(cardp, BOOT_CMD_FW_BY_USB); in if_usb_prog_firmware()
876 } while (cardp->bootcmdresp == 0 && j < 10); in if_usb_prog_firmware()
877 } while (cardp->bootcmdresp == 0 && i < 5); in if_usb_prog_firmware()
879 if (cardp->bootcmdresp == BOOT_CMD_RESP_NOT_SUPPORTED) { in if_usb_prog_firmware()
882 usb_kill_urb(cardp->rx_urb); in if_usb_prog_firmware()
883 usb_kill_urb(cardp->tx_urb); in if_usb_prog_firmware()
884 if (if_usb_submit_rx_urb(cardp) < 0) in if_usb_prog_firmware()
887 } else if (cardp->bootcmdresp <= 0) { in if_usb_prog_firmware()
889 if_usb_reset_device(cardp); in if_usb_prog_firmware()
898 cardp->totalbytes = 0; in if_usb_prog_firmware()
899 cardp->fwlastblksent = 0; in if_usb_prog_firmware()
900 cardp->CRC_OK = 1; in if_usb_prog_firmware()
901 cardp->fwdnldover = 0; in if_usb_prog_firmware()
902 cardp->fwseqnum = -1; in if_usb_prog_firmware()
903 cardp->totalbytes = 0; in if_usb_prog_firmware()
904 cardp->fwfinalblk = 0; in if_usb_prog_firmware()
907 if_usb_send_fw_pkt(cardp); in if_usb_prog_firmware()
910 wait_event_interruptible(cardp->fw_wq, cardp->surprise_removed || cardp->fwdnldover); in if_usb_prog_firmware()
912 del_timer_sync(&cardp->fw_timeout); in if_usb_prog_firmware()
913 usb_kill_urb(cardp->rx_urb); in if_usb_prog_firmware()
915 if (!cardp->fwdnldover) { in if_usb_prog_firmware()
918 if_usb_reset_device(cardp); in if_usb_prog_firmware()
927 cardp->priv->fw_ready = 1; in if_usb_prog_firmware()
928 if_usb_submit_rx_urb(cardp); in if_usb_prog_firmware()
943 cardp->fw = NULL; in if_usb_prog_firmware()
951 struct if_usb_card *cardp = usb_get_intfdata(intf); in if_usb_suspend() local
952 struct lbs_private *priv = cardp->priv; in if_usb_suspend()
976 usb_kill_urb(cardp->tx_urb); in if_usb_suspend()
977 usb_kill_urb(cardp->rx_urb); in if_usb_suspend()
986 struct if_usb_card *cardp = usb_get_intfdata(intf); in if_usb_resume() local
987 struct lbs_private *priv = cardp->priv; in if_usb_resume()
991 if_usb_submit_rx_urb(cardp); in if_usb_resume()