129 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * This file contains definitions for mwifiex USB interface driver.4 *5 * Copyright 2011-2020 NXP6 */7 8#ifndef _MWIFIEX_USB_H9#define _MWIFIEX_USB_H10 11#include <linux/completion.h>12#include <linux/usb.h>13 14#define USB8XXX_VID 0x128615 16#define USB8766_PID_1 0x204117#define USB8766_PID_2 0x204218#define USB8797_PID_1 0x204319#define USB8797_PID_2 0x204420#define USB8801_PID_1 0x204921#define USB8801_PID_2 0x204a22#define USB8997_PID_1 0x205223#define USB8997_PID_2 0x204e24 25 26#define USB8XXX_FW_DNLD 127#define USB8XXX_FW_READY 228#define USB8XXX_FW_MAX_RETRY 329 30#define MWIFIEX_TX_DATA_PORT 231#define MWIFIEX_TX_DATA_URB 632#define MWIFIEX_RX_DATA_URB 633#define MWIFIEX_USB_TIMEOUT 10034 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 62041#define FW_DNLD_RX_BUF_SIZE 204842#define FW_HAS_LAST_BLOCK 0x0000000443#define FW_CMD_7 0x0000000744 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 156#define MWIFIEX_USB_TX_AGGR_TMO_MAX 457 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