18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _LBS_IF_USB_H 38c2ecf20Sopenharmony_ci#define _LBS_IF_USB_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <linux/wait.h> 68c2ecf20Sopenharmony_ci#include <linux/timer.h> 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cistruct lbs_private; 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci/* 118c2ecf20Sopenharmony_ci * This file contains definition for USB interface. 128c2ecf20Sopenharmony_ci */ 138c2ecf20Sopenharmony_ci#define CMD_TYPE_REQUEST 0xF00DFACE 148c2ecf20Sopenharmony_ci#define CMD_TYPE_DATA 0xBEADC0DE 158c2ecf20Sopenharmony_ci#define CMD_TYPE_INDICATION 0xBEEFFACE 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#define IPFIELD_ALIGN_OFFSET 2 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#define BOOT_CMD_FW_BY_USB 0x01 208c2ecf20Sopenharmony_ci#define BOOT_CMD_FW_IN_EEPROM 0x02 218c2ecf20Sopenharmony_ci#define BOOT_CMD_UPDATE_BOOT2 0x03 228c2ecf20Sopenharmony_ci#define BOOT_CMD_UPDATE_FW 0x04 238c2ecf20Sopenharmony_ci#define BOOT_CMD_MAGIC_NUMBER 0x4C56524D /* LVRM */ 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cistruct bootcmd 268c2ecf20Sopenharmony_ci{ 278c2ecf20Sopenharmony_ci __le32 magic; 288c2ecf20Sopenharmony_ci uint8_t cmd; 298c2ecf20Sopenharmony_ci uint8_t pad[11]; 308c2ecf20Sopenharmony_ci}; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci#define BOOT_CMD_RESP_OK 0x0001 338c2ecf20Sopenharmony_ci#define BOOT_CMD_RESP_FAIL 0x0000 348c2ecf20Sopenharmony_ci#define BOOT_CMD_RESP_NOT_SUPPORTED 0x0002 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_cistruct bootcmdresp 378c2ecf20Sopenharmony_ci{ 388c2ecf20Sopenharmony_ci __le32 magic; 398c2ecf20Sopenharmony_ci uint8_t cmd; 408c2ecf20Sopenharmony_ci uint8_t result; 418c2ecf20Sopenharmony_ci uint8_t pad[2]; 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci/* USB card description structure*/ 458c2ecf20Sopenharmony_cistruct if_usb_card { 468c2ecf20Sopenharmony_ci struct usb_device *udev; 478c2ecf20Sopenharmony_ci uint32_t model; /* MODEL_* */ 488c2ecf20Sopenharmony_ci struct urb *rx_urb, *tx_urb; 498c2ecf20Sopenharmony_ci struct lbs_private *priv; 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci struct sk_buff *rx_skb; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci uint8_t ep_in; 548c2ecf20Sopenharmony_ci uint8_t ep_out; 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci /* bootcmdresp == 0 means command is pending 578c2ecf20Sopenharmony_ci * bootcmdresp < 0 means error 588c2ecf20Sopenharmony_ci * bootcmdresp > 0 is a BOOT_CMD_RESP_* from firmware 598c2ecf20Sopenharmony_ci */ 608c2ecf20Sopenharmony_ci int8_t bootcmdresp; 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci int ep_in_size; 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci void *ep_out_buf; 658c2ecf20Sopenharmony_ci int ep_out_size; 668c2ecf20Sopenharmony_ci 678c2ecf20Sopenharmony_ci const struct firmware *fw; 688c2ecf20Sopenharmony_ci struct timer_list fw_timeout; 698c2ecf20Sopenharmony_ci wait_queue_head_t fw_wq; 708c2ecf20Sopenharmony_ci uint32_t fwseqnum; 718c2ecf20Sopenharmony_ci uint32_t totalbytes; 728c2ecf20Sopenharmony_ci uint32_t fwlastblksent; 738c2ecf20Sopenharmony_ci uint8_t CRC_OK; 748c2ecf20Sopenharmony_ci uint8_t fwdnldover; 758c2ecf20Sopenharmony_ci uint8_t fwfinalblk; 768c2ecf20Sopenharmony_ci uint8_t surprise_removed; 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci __le16 boot2_version; 798c2ecf20Sopenharmony_ci}; 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci/* fwheader */ 828c2ecf20Sopenharmony_cistruct fwheader { 838c2ecf20Sopenharmony_ci __le32 dnldcmd; 848c2ecf20Sopenharmony_ci __le32 baseaddr; 858c2ecf20Sopenharmony_ci __le32 datalength; 868c2ecf20Sopenharmony_ci __le32 CRC; 878c2ecf20Sopenharmony_ci}; 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci#define FW_MAX_DATA_BLK_SIZE 600 908c2ecf20Sopenharmony_ci/* FWData */ 918c2ecf20Sopenharmony_cistruct fwdata { 928c2ecf20Sopenharmony_ci struct fwheader hdr; 938c2ecf20Sopenharmony_ci __le32 seqnum; 948c2ecf20Sopenharmony_ci uint8_t data[]; 958c2ecf20Sopenharmony_ci}; 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci/* fwsyncheader */ 988c2ecf20Sopenharmony_cistruct fwsyncheader { 998c2ecf20Sopenharmony_ci __le32 cmd; 1008c2ecf20Sopenharmony_ci __le32 seqnum; 1018c2ecf20Sopenharmony_ci}; 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci#define FW_HAS_DATA_TO_RECV 0x00000001 1048c2ecf20Sopenharmony_ci#define FW_HAS_LAST_BLOCK 0x00000004 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_ci#endif 108