1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2f988d640SKalle Valo #ifndef _LBS_IF_USB_H 3f988d640SKalle Valo #define _LBS_IF_USB_H 4f988d640SKalle Valo 5f988d640SKalle Valo #include <linux/wait.h> 6f988d640SKalle Valo #include <linux/timer.h> 7f988d640SKalle Valo 8f988d640SKalle Valo struct lbs_private; 9f988d640SKalle Valo 10f988d640SKalle Valo /* 11f988d640SKalle Valo * This file contains definition for USB interface. 12f988d640SKalle Valo */ 13f988d640SKalle Valo #define CMD_TYPE_REQUEST 0xF00DFACE 14f988d640SKalle Valo #define CMD_TYPE_DATA 0xBEADC0DE 15f988d640SKalle Valo #define CMD_TYPE_INDICATION 0xBEEFFACE 16f988d640SKalle Valo 17f988d640SKalle Valo #define IPFIELD_ALIGN_OFFSET 2 18f988d640SKalle Valo 19f988d640SKalle Valo #define BOOT_CMD_FW_BY_USB 0x01 20f988d640SKalle Valo #define BOOT_CMD_FW_IN_EEPROM 0x02 21f988d640SKalle Valo #define BOOT_CMD_UPDATE_BOOT2 0x03 22f988d640SKalle Valo #define BOOT_CMD_UPDATE_FW 0x04 23f988d640SKalle Valo #define BOOT_CMD_MAGIC_NUMBER 0x4C56524D /* LVRM */ 24f988d640SKalle Valo 25f988d640SKalle Valo struct bootcmd 26f988d640SKalle Valo { 27f988d640SKalle Valo __le32 magic; 28f988d640SKalle Valo uint8_t cmd; 29f988d640SKalle Valo uint8_t pad[11]; 30f988d640SKalle Valo }; 31f988d640SKalle Valo 32f988d640SKalle Valo #define BOOT_CMD_RESP_OK 0x0001 33f988d640SKalle Valo #define BOOT_CMD_RESP_FAIL 0x0000 34f988d640SKalle Valo #define BOOT_CMD_RESP_NOT_SUPPORTED 0x0002 35f988d640SKalle Valo 36f988d640SKalle Valo struct bootcmdresp 37f988d640SKalle Valo { 38f988d640SKalle Valo __le32 magic; 39f988d640SKalle Valo uint8_t cmd; 40f988d640SKalle Valo uint8_t result; 41f988d640SKalle Valo uint8_t pad[2]; 42f988d640SKalle Valo }; 43f988d640SKalle Valo 44f988d640SKalle Valo /* USB card description structure*/ 45f988d640SKalle Valo struct if_usb_card { 46f988d640SKalle Valo struct usb_device *udev; 47f988d640SKalle Valo uint32_t model; /* MODEL_* */ 48f988d640SKalle Valo struct urb *rx_urb, *tx_urb; 49f988d640SKalle Valo struct lbs_private *priv; 50f988d640SKalle Valo 51f988d640SKalle Valo struct sk_buff *rx_skb; 52f988d640SKalle Valo 53f988d640SKalle Valo uint8_t ep_in; 54f988d640SKalle Valo uint8_t ep_out; 55f988d640SKalle Valo 56f988d640SKalle Valo /* bootcmdresp == 0 means command is pending 57f988d640SKalle Valo * bootcmdresp < 0 means error 58f988d640SKalle Valo * bootcmdresp > 0 is a BOOT_CMD_RESP_* from firmware 59f988d640SKalle Valo */ 60f988d640SKalle Valo int8_t bootcmdresp; 61f988d640SKalle Valo 62f988d640SKalle Valo int ep_in_size; 63f988d640SKalle Valo 64f988d640SKalle Valo void *ep_out_buf; 65f988d640SKalle Valo int ep_out_size; 66f988d640SKalle Valo 67f988d640SKalle Valo const struct firmware *fw; 68f988d640SKalle Valo struct timer_list fw_timeout; 69f988d640SKalle Valo wait_queue_head_t fw_wq; 70f988d640SKalle Valo uint32_t fwseqnum; 71f988d640SKalle Valo uint32_t totalbytes; 72f988d640SKalle Valo uint32_t fwlastblksent; 73f988d640SKalle Valo uint8_t CRC_OK; 74f988d640SKalle Valo uint8_t fwdnldover; 75f988d640SKalle Valo uint8_t fwfinalblk; 76f988d640SKalle Valo uint8_t surprise_removed; 77f988d640SKalle Valo 78f988d640SKalle Valo __le16 boot2_version; 79f988d640SKalle Valo }; 80f988d640SKalle Valo 81f988d640SKalle Valo /* fwheader */ 82f988d640SKalle Valo struct fwheader { 83f988d640SKalle Valo __le32 dnldcmd; 84f988d640SKalle Valo __le32 baseaddr; 85f988d640SKalle Valo __le32 datalength; 86f988d640SKalle Valo __le32 CRC; 87f988d640SKalle Valo }; 88f988d640SKalle Valo 89f988d640SKalle Valo #define FW_MAX_DATA_BLK_SIZE 600 90f988d640SKalle Valo /* FWData */ 91f988d640SKalle Valo struct fwdata { 92f988d640SKalle Valo struct fwheader hdr; 93f988d640SKalle Valo __le32 seqnum; 94*c5047d5bSGustavo A. R. Silva uint8_t data[]; 95f988d640SKalle Valo }; 96f988d640SKalle Valo 97f988d640SKalle Valo /* fwsyncheader */ 98f988d640SKalle Valo struct fwsyncheader { 99f988d640SKalle Valo __le32 cmd; 100f988d640SKalle Valo __le32 seqnum; 101f988d640SKalle Valo }; 102f988d640SKalle Valo 103f988d640SKalle Valo #define FW_HAS_DATA_TO_RECV 0x00000001 104f988d640SKalle Valo #define FW_HAS_LAST_BLOCK 0x00000004 105f988d640SKalle Valo 106f988d640SKalle Valo 107f988d640SKalle Valo #endif 108