1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * This file contains definitions for mwifiex USB interface driver. 4 * 5 * Copyright 2011-2020 NXP 6 */ 7 8#ifndef _MWIFIEX_USB_H 9#define _MWIFIEX_USB_H 10 11#include <linux/completion.h> 12#include <linux/usb.h> 13 14#define USB8XXX_VID 0x1286 15 16#define USB8766_PID_1 0x2041 17#define USB8766_PID_2 0x2042 18#define USB8797_PID_1 0x2043 19#define USB8797_PID_2 0x2044 20#define USB8801_PID_1 0x2049 21#define USB8801_PID_2 0x204a 22#define USB8997_PID_1 0x2052 23#define USB8997_PID_2 0x204e 24 25 26#define USB8XXX_FW_DNLD 1 27#define USB8XXX_FW_READY 2 28#define USB8XXX_FW_MAX_RETRY 3 29 30#define MWIFIEX_TX_DATA_PORT 2 31#define MWIFIEX_TX_DATA_URB 6 32#define MWIFIEX_RX_DATA_URB 6 33#define MWIFIEX_USB_TIMEOUT 100 34 35#define USB8766_DEFAULT_FW_NAME "mrvl/usb8766_uapsta.bin" 36#define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" 37#define USB8801_DEFAULT_FW_NAME "mrvl/usb8801_uapsta.bin" 38#define USB8997_DEFAULT_FW_NAME "mrvl/usbusb8997_combo_v4.bin" 39 40#define FW_DNLD_TX_BUF_SIZE 620 41#define FW_DNLD_RX_BUF_SIZE 2048 42#define FW_HAS_LAST_BLOCK 0x00000004 43#define FW_CMD_7 0x00000007 44 45#define FW_DATA_XMIT_SIZE \ 46 (sizeof(struct fw_header) + dlen + sizeof(u32)) 47 48struct urb_context { 49 struct mwifiex_adapter *adapter; 50 struct sk_buff *skb; 51 struct urb *urb; 52 u8 ep; 53}; 54 55#define MWIFIEX_USB_TX_AGGR_TMO_MIN 1 56#define MWIFIEX_USB_TX_AGGR_TMO_MAX 4 57 58struct tx_aggr_tmr_cnxt { 59 struct mwifiex_adapter *adapter; 60 struct usb_tx_data_port *port; 61 struct timer_list hold_timer; 62 bool is_hold_timer_set; 63 u32 hold_tmo_msecs; 64}; 65 66struct usb_tx_aggr { 67 struct sk_buff_head aggr_list; 68 int aggr_len; 69 int aggr_num; 70 struct tx_aggr_tmr_cnxt timer_cnxt; 71}; 72 73struct usb_tx_data_port { 74 u8 tx_data_ep; 75 u8 block_status; 76 atomic_t tx_data_urb_pending; 77 int tx_data_ix; 78 struct urb_context tx_data_list[MWIFIEX_TX_DATA_URB]; 79 /* usb tx aggregation*/ 80 struct usb_tx_aggr tx_aggr; 81 struct sk_buff *skb_aggr[MWIFIEX_TX_DATA_URB]; 82 /* lock for protect tx aggregation data path*/ 83 spinlock_t tx_aggr_lock; 84}; 85 86struct usb_card_rec { 87 struct mwifiex_adapter *adapter; 88 struct usb_device *udev; 89 struct usb_interface *intf; 90 struct completion fw_done; 91 u8 rx_cmd_ep; 92 struct urb_context rx_cmd; 93 atomic_t rx_cmd_urb_pending; 94 struct urb_context rx_data_list[MWIFIEX_RX_DATA_URB]; 95 u8 usb_boot_state; 96 u8 rx_data_ep; 97 atomic_t rx_data_urb_pending; 98 u8 tx_cmd_ep; 99 atomic_t tx_cmd_urb_pending; 100 int bulk_out_maxpktsize; 101 struct urb_context tx_cmd; 102 u8 mc_resync_flag; 103 struct usb_tx_data_port port[MWIFIEX_TX_DATA_PORT]; 104 int rx_cmd_ep_type; 105 u8 rx_cmd_interval; 106 int tx_cmd_ep_type; 107 u8 tx_cmd_interval; 108}; 109 110struct fw_header { 111 __le32 dnld_cmd; 112 __le32 base_addr; 113 __le32 data_len; 114 __le32 crc; 115}; 116 117struct fw_sync_header { 118 __le32 cmd; 119 __le32 seq_num; 120} __packed; 121 122struct fw_data { 123 struct fw_header fw_hdr; 124 __le32 seq_num; 125 u8 data[]; 126} __packed; 127 128#endif /*_MWIFIEX_USB_H */ 129