#ifndef _LBS_IF_USB_H #define _LBS_IF_USB_H #include <linux/wait.h> #include <linux/timer.h> struct lbs_private; /** * This file contains definition for USB interface. */ #define CMD_TYPE_REQUEST 0xF00DFACE #define CMD_TYPE_DATA 0xBEADC0DE #define CMD_TYPE_INDICATION 0xBEEFFACE #define IPFIELD_ALIGN_OFFSET 2 #define BOOT_CMD_FW_BY_USB 0x01 #define BOOT_CMD_FW_IN_EEPROM 0x02 #define BOOT_CMD_UPDATE_BOOT2 0x03 #define BOOT_CMD_UPDATE_FW 0x04 #define BOOT_CMD_MAGIC_NUMBER 0x4C56524D /* M=>0x4D,R=>0x52,V=>0x56,L=>0x4C */ struct bootcmdstr { __le32 u32magicnumber; u8 u8cmd_tag; u8 au8dumy[11]; }; #define BOOT_CMD_RESP_OK 0x0001 #define BOOT_CMD_RESP_FAIL 0x0000 struct bootcmdrespStr { __le32 u32magicnumber; u8 u8cmd_tag; u8 u8result; u8 au8dumy[2]; }; /* read callback private data */ struct read_cb_info { struct usb_card_rec *cardp; struct sk_buff *skb; }; /** USB card description structure*/ struct usb_card_rec { struct usb_device *udev; struct urb *rx_urb, *tx_urb; struct lbs_private *priv; struct read_cb_info rinfo; int bulk_in_size; u8 bulk_in_endpointAddr; u8 *bulk_out_buffer; int bulk_out_size; u8 bulk_out_endpointAddr; const struct firmware *fw; struct timer_list fw_timeout; wait_queue_head_t fw_wq; u8 CRC_OK; u32 fwseqnum; u32 lastseqnum; u32 totalbytes; u32 fwlastblksent; u8 fwdnldover; u8 fwfinalblk; u8 surprise_removed; u32 usb_event_cause; u8 usb_int_cause; s8 bootcmdresp; }; /** fwheader */ struct fwheader { __le32 dnldcmd; __le32 baseaddr; __le32 datalength; __le32 CRC; }; #define FW_MAX_DATA_BLK_SIZE 600 /** FWData */ struct FWData { struct fwheader fwheader; __le32 seqnum; u8 data[FW_MAX_DATA_BLK_SIZE]; }; /** fwsyncheader */ struct fwsyncheader { __le32 cmd; __le32 seqnum; }; #define FW_HAS_DATA_TO_RECV 0x00000001 #define FW_HAS_LAST_BLOCK 0x00000004 #define FW_DATA_XMIT_SIZE \ sizeof(struct fwheader) + le32_to_cpu(fwdata->fwheader.datalength) + sizeof(u32) #endif