1139825Simp/* SPDX-License-Identifier: GPL-2.0-or-later */ 249076Swpaul/* 349076Swpaul * Copyright (C) 2008, cozybit Inc. 449076Swpaul * Copyright (C) 2003-2006, Marvell International Ltd. 549076Swpaul */ 649076Swpaul#include <linux/wait.h> 749076Swpaul#include <linux/timer.h> 849076Swpaul 949076Swpaulstruct lbtf_private; 1049076Swpaul 1149076Swpaul/** 1249076Swpaul * This file contains definition for USB interface. 1349076Swpaul */ 1449076Swpaul#define CMD_TYPE_REQUEST 0xF00DFACE 1549076Swpaul#define CMD_TYPE_DATA 0xBEADC0DE 1649076Swpaul#define CMD_TYPE_INDICATION 0xBEEFFACE 1749076Swpaul 1849076Swpaul#define BOOT_CMD_FW_BY_USB 0x01 1949076Swpaul#define BOOT_CMD_FW_IN_EEPROM 0x02 2049076Swpaul#define BOOT_CMD_UPDATE_BOOT2 0x03 2149076Swpaul#define BOOT_CMD_UPDATE_FW 0x04 2249076Swpaul#define BOOT_CMD_MAGIC_NUMBER 0x4C56524D /* LVRM */ 2349076Swpaul 2449076Swpaulstruct bootcmd { 2549076Swpaul __le32 magic; 2649076Swpaul uint8_t cmd; 2749076Swpaul uint8_t pad[11]; 2849076Swpaul}; 2949076Swpaul 3049076Swpaul#define BOOT_CMD_RESP_OK 0x0001 3149076Swpaul#define BOOT_CMD_RESP_FAIL 0x0000 3249076Swpaul 33122678Sobrienstruct bootcmdresp { 34122678Sobrien __le32 magic; 35122678Sobrien uint8_t cmd; 3649076Swpaul uint8_t result; 3749076Swpaul uint8_t pad[2]; 3851682Swpaul}; 39137835Sbrueffer 4049076Swpaul/** USB card description structure*/ 4149076Swpaulstruct if_usb_card { 4249076Swpaul struct usb_device *udev; 4349076Swpaul struct urb *rx_urb, *tx_urb, *cmd_urb; 4449076Swpaul struct lbtf_private *priv; 4549076Swpaul 4649076Swpaul struct sk_buff *rx_skb; 4749076Swpaul 4849076Swpaul uint8_t ep_in; 4949076Swpaul uint8_t ep_out; 5049076Swpaul 5149076Swpaul int8_t bootcmdresp; 52175526Syongari 53175526Syongari int ep_in_size; 5449076Swpaul 5549076Swpaul void *ep_out_buf; 5649076Swpaul int ep_out_size; 5749076Swpaul 5849076Swpaul const struct firmware *fw; 5949076Swpaul struct timer_list fw_timeout; 6049076Swpaul wait_queue_head_t fw_wq; 6149076Swpaul uint32_t fwseqnum; 62175526Syongari uint32_t totalbytes; 63175526Syongari uint32_t fwlastblksent; 64175526Syongari uint8_t CRC_OK; 6549076Swpaul uint8_t fwdnldover; 6649076Swpaul uint8_t fwfinalblk; 6749076Swpaul 6849076Swpaul __le16 boot2_version; 6949076Swpaul}; 7049076Swpaul 7149076Swpaul/** fwheader */ 7249076Swpaulstruct fwheader { 7349076Swpaul __le32 dnldcmd; 7449076Swpaul __le32 baseaddr; 7549076Swpaul __le32 datalength; 7649076Swpaul __le32 CRC; 7749076Swpaul}; 7849076Swpaul 7949076Swpaul#define FW_MAX_DATA_BLK_SIZE 600 8049076Swpaul/** FWData */ 8149076Swpaulstruct fwdata { 8249076Swpaul struct fwheader hdr; 83150968Sglebius __le32 seqnum; 84150968Sglebius uint8_t data[]; 85150968Sglebius}; 86150968Sglebius 8749076Swpaul/** fwsyncheader */ 8849076Swpaulstruct fwsyncheader { 89175526Syongari __le32 cmd; 90175526Syongari __le32 seqnum; 91175526Syongari}; 92175526Syongari 9349076Swpaul#define FW_HAS_DATA_TO_RECV 0x00000001 94175526Syongari#define FW_HAS_LAST_BLOCK 0x00000004 95129878Sphk