Training courses
Kernel and Embedded Linux
Bootlin training courses
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
/* 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