forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
1.9 KiB
107 lines
1.9 KiB
/* 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[]; |
|
}; |
|
|
|
/* fwsyncheader */ |
|
struct fwsyncheader { |
|
__le32 cmd; |
|
__le32 seqnum; |
|
}; |
|
|
|
#define FW_HAS_DATA_TO_RECV 0x00000001 |
|
#define FW_HAS_LAST_BLOCK 0x00000004 |
|
|
|
|
|
#endif
|
|
|