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