| /* SPDX-License-Identifier: GPL-2.0 */ |
| #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 /* LVRM */ |
| |
| struct bootcmd |
| { |
| __le32 magic; |
| uint8_t cmd; |
| uint8_t pad[11]; |
| }; |
| |
| #define BOOT_CMD_RESP_OK 0x0001 |
| #define BOOT_CMD_RESP_FAIL 0x0000 |
| #define BOOT_CMD_RESP_NOT_SUPPORTED 0x0002 |
| |
| struct bootcmdresp |
| { |
| __le32 magic; |
| uint8_t cmd; |
| uint8_t result; |
| uint8_t pad[2]; |
| }; |
| |
| /* USB card description structure*/ |
| struct if_usb_card { |
| struct usb_device *udev; |
| uint32_t model; /* MODEL_* */ |
| struct urb *rx_urb, *tx_urb; |
| struct lbs_private *priv; |
| |
| struct sk_buff *rx_skb; |
| |
| uint8_t ep_in; |
| uint8_t ep_out; |
| |
| /* bootcmdresp == 0 means command is pending |
| * bootcmdresp < 0 means error |
| * bootcmdresp > 0 is a BOOT_CMD_RESP_* from firmware |
| */ |
| int8_t bootcmdresp; |
| |
| int ep_in_size; |
| |
| void *ep_out_buf; |
| int ep_out_size; |
| |
| const struct firmware *fw; |
| struct timer_list fw_timeout; |
| wait_queue_head_t fw_wq; |
| uint32_t fwseqnum; |
| uint32_t totalbytes; |
| uint32_t fwlastblksent; |
| uint8_t CRC_OK; |
| uint8_t fwdnldover; |
| uint8_t fwfinalblk; |
| uint8_t surprise_removed; |
| |
| __le16 boot2_version; |
| }; |
| |
| /* fwheader */ |
| struct fwheader { |
| __le32 dnldcmd; |
| __le32 baseaddr; |
| __le32 datalength; |
| __le32 CRC; |
| }; |
| |
| #define FW_MAX_DATA_BLK_SIZE 600 |
| /* FWData */ |
| struct fwdata { |
| struct fwheader hdr; |
| __le32 seqnum; |
| uint8_t data[0]; |
| }; |
| |
| /* fwsyncheader */ |
| struct fwsyncheader { |
| __le32 cmd; |
| __le32 seqnum; |
| }; |
| |
| #define FW_HAS_DATA_TO_RECV 0x00000001 |
| #define FW_HAS_LAST_BLOCK 0x00000004 |
| |
| |
| #endif |