1*277b024eSKalle Valo /* 2*277b024eSKalle Valo * This file contains definitions for mwifiex USB interface driver. 3*277b024eSKalle Valo * 4*277b024eSKalle Valo * Copyright (C) 2012-2014, Marvell International Ltd. 5*277b024eSKalle Valo * 6*277b024eSKalle Valo * This software file (the "File") is distributed by Marvell International 7*277b024eSKalle Valo * Ltd. under the terms of the GNU General Public License Version 2, June 1991 8*277b024eSKalle Valo * (the "License"). You may use, redistribute and/or modify this File in 9*277b024eSKalle Valo * accordance with the terms and conditions of the License, a copy of which 10*277b024eSKalle Valo * is available by writing to the Free Software Foundation, Inc., 11*277b024eSKalle Valo * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the 12*277b024eSKalle Valo * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 13*277b024eSKalle Valo * 14*277b024eSKalle Valo * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 15*277b024eSKalle Valo * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 16*277b024eSKalle Valo * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 17*277b024eSKalle Valo * this warranty disclaimer. 18*277b024eSKalle Valo */ 19*277b024eSKalle Valo 20*277b024eSKalle Valo #ifndef _MWIFIEX_USB_H 21*277b024eSKalle Valo #define _MWIFIEX_USB_H 22*277b024eSKalle Valo 23*277b024eSKalle Valo #include <linux/usb.h> 24*277b024eSKalle Valo 25*277b024eSKalle Valo #define USB8XXX_VID 0x1286 26*277b024eSKalle Valo 27*277b024eSKalle Valo #define USB8766_PID_1 0x2041 28*277b024eSKalle Valo #define USB8766_PID_2 0x2042 29*277b024eSKalle Valo #define USB8797_PID_1 0x2043 30*277b024eSKalle Valo #define USB8797_PID_2 0x2044 31*277b024eSKalle Valo #define USB8801_PID_1 0x2049 32*277b024eSKalle Valo #define USB8801_PID_2 0x204a 33*277b024eSKalle Valo #define USB8997_PID_1 0x2052 34*277b024eSKalle Valo #define USB8997_PID_2 0x204e 35*277b024eSKalle Valo 36*277b024eSKalle Valo 37*277b024eSKalle Valo #define USB8XXX_FW_DNLD 1 38*277b024eSKalle Valo #define USB8XXX_FW_READY 2 39*277b024eSKalle Valo #define USB8XXX_FW_MAX_RETRY 3 40*277b024eSKalle Valo 41*277b024eSKalle Valo #define MWIFIEX_TX_DATA_PORT 2 42*277b024eSKalle Valo #define MWIFIEX_TX_DATA_URB 6 43*277b024eSKalle Valo #define MWIFIEX_RX_DATA_URB 6 44*277b024eSKalle Valo #define MWIFIEX_USB_TIMEOUT 100 45*277b024eSKalle Valo 46*277b024eSKalle Valo #define USB8766_DEFAULT_FW_NAME "mrvl/usb8766_uapsta.bin" 47*277b024eSKalle Valo #define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" 48*277b024eSKalle Valo #define USB8801_DEFAULT_FW_NAME "mrvl/usb8801_uapsta.bin" 49*277b024eSKalle Valo #define USB8997_DEFAULT_FW_NAME "mrvl/usb8997_uapsta.bin" 50*277b024eSKalle Valo 51*277b024eSKalle Valo #define FW_DNLD_TX_BUF_SIZE 620 52*277b024eSKalle Valo #define FW_DNLD_RX_BUF_SIZE 2048 53*277b024eSKalle Valo #define FW_HAS_LAST_BLOCK 0x00000004 54*277b024eSKalle Valo 55*277b024eSKalle Valo #define FW_DATA_XMIT_SIZE \ 56*277b024eSKalle Valo (sizeof(struct fw_header) + dlen + sizeof(u32)) 57*277b024eSKalle Valo 58*277b024eSKalle Valo struct urb_context { 59*277b024eSKalle Valo struct mwifiex_adapter *adapter; 60*277b024eSKalle Valo struct sk_buff *skb; 61*277b024eSKalle Valo struct urb *urb; 62*277b024eSKalle Valo u8 ep; 63*277b024eSKalle Valo }; 64*277b024eSKalle Valo 65*277b024eSKalle Valo struct usb_tx_data_port { 66*277b024eSKalle Valo u8 tx_data_ep; 67*277b024eSKalle Valo u8 block_status; 68*277b024eSKalle Valo atomic_t tx_data_urb_pending; 69*277b024eSKalle Valo int tx_data_ix; 70*277b024eSKalle Valo struct urb_context tx_data_list[MWIFIEX_TX_DATA_URB]; 71*277b024eSKalle Valo }; 72*277b024eSKalle Valo 73*277b024eSKalle Valo struct usb_card_rec { 74*277b024eSKalle Valo struct mwifiex_adapter *adapter; 75*277b024eSKalle Valo struct usb_device *udev; 76*277b024eSKalle Valo struct usb_interface *intf; 77*277b024eSKalle Valo u8 rx_cmd_ep; 78*277b024eSKalle Valo struct urb_context rx_cmd; 79*277b024eSKalle Valo atomic_t rx_cmd_urb_pending; 80*277b024eSKalle Valo struct urb_context rx_data_list[MWIFIEX_RX_DATA_URB]; 81*277b024eSKalle Valo u8 usb_boot_state; 82*277b024eSKalle Valo u8 rx_data_ep; 83*277b024eSKalle Valo atomic_t rx_data_urb_pending; 84*277b024eSKalle Valo u8 tx_cmd_ep; 85*277b024eSKalle Valo atomic_t tx_cmd_urb_pending; 86*277b024eSKalle Valo int bulk_out_maxpktsize; 87*277b024eSKalle Valo struct urb_context tx_cmd; 88*277b024eSKalle Valo u8 mc_resync_flag; 89*277b024eSKalle Valo struct usb_tx_data_port port[MWIFIEX_TX_DATA_PORT]; 90*277b024eSKalle Valo }; 91*277b024eSKalle Valo 92*277b024eSKalle Valo struct fw_header { 93*277b024eSKalle Valo __le32 dnld_cmd; 94*277b024eSKalle Valo __le32 base_addr; 95*277b024eSKalle Valo __le32 data_len; 96*277b024eSKalle Valo __le32 crc; 97*277b024eSKalle Valo }; 98*277b024eSKalle Valo 99*277b024eSKalle Valo struct fw_sync_header { 100*277b024eSKalle Valo __le32 cmd; 101*277b024eSKalle Valo __le32 seq_num; 102*277b024eSKalle Valo }; 103*277b024eSKalle Valo 104*277b024eSKalle Valo struct fw_data { 105*277b024eSKalle Valo struct fw_header fw_hdr; 106*277b024eSKalle Valo __le32 seq_num; 107*277b024eSKalle Valo u8 data[1]; 108*277b024eSKalle Valo }; 109*277b024eSKalle Valo 110*277b024eSKalle Valo #endif /*_MWIFIEX_USB_H */ 111