1277b024eSKalle Valo /* 2277b024eSKalle Valo * This file contains definitions for mwifiex USB interface driver. 3277b024eSKalle Valo * 4277b024eSKalle Valo * Copyright (C) 2012-2014, Marvell International Ltd. 5277b024eSKalle Valo * 6277b024eSKalle Valo * This software file (the "File") is distributed by Marvell International 7277b024eSKalle Valo * Ltd. under the terms of the GNU General Public License Version 2, June 1991 8277b024eSKalle Valo * (the "License"). You may use, redistribute and/or modify this File in 9277b024eSKalle Valo * accordance with the terms and conditions of the License, a copy of which 10277b024eSKalle Valo * is available by writing to the Free Software Foundation, Inc., 11277b024eSKalle Valo * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the 12277b024eSKalle Valo * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. 13277b024eSKalle Valo * 14277b024eSKalle Valo * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE 15277b024eSKalle Valo * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE 16277b024eSKalle Valo * ARE EXPRESSLY DISCLAIMED. The License provides additional details about 17277b024eSKalle Valo * this warranty disclaimer. 18277b024eSKalle Valo */ 19277b024eSKalle Valo 20277b024eSKalle Valo #ifndef _MWIFIEX_USB_H 21277b024eSKalle Valo #define _MWIFIEX_USB_H 22277b024eSKalle Valo 23*4a79aa17SBrian Norris #include <linux/completion.h> 24277b024eSKalle Valo #include <linux/usb.h> 25277b024eSKalle Valo 26277b024eSKalle Valo #define USB8XXX_VID 0x1286 27277b024eSKalle Valo 28277b024eSKalle Valo #define USB8766_PID_1 0x2041 29277b024eSKalle Valo #define USB8766_PID_2 0x2042 30277b024eSKalle Valo #define USB8797_PID_1 0x2043 31277b024eSKalle Valo #define USB8797_PID_2 0x2044 32277b024eSKalle Valo #define USB8801_PID_1 0x2049 33277b024eSKalle Valo #define USB8801_PID_2 0x204a 34277b024eSKalle Valo #define USB8997_PID_1 0x2052 35277b024eSKalle Valo #define USB8997_PID_2 0x204e 36277b024eSKalle Valo 37277b024eSKalle Valo 38277b024eSKalle Valo #define USB8XXX_FW_DNLD 1 39277b024eSKalle Valo #define USB8XXX_FW_READY 2 40277b024eSKalle Valo #define USB8XXX_FW_MAX_RETRY 3 41277b024eSKalle Valo 42277b024eSKalle Valo #define MWIFIEX_TX_DATA_PORT 2 43277b024eSKalle Valo #define MWIFIEX_TX_DATA_URB 6 44277b024eSKalle Valo #define MWIFIEX_RX_DATA_URB 6 45277b024eSKalle Valo #define MWIFIEX_USB_TIMEOUT 100 46277b024eSKalle Valo 47277b024eSKalle Valo #define USB8766_DEFAULT_FW_NAME "mrvl/usb8766_uapsta.bin" 48277b024eSKalle Valo #define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" 49277b024eSKalle Valo #define USB8801_DEFAULT_FW_NAME "mrvl/usb8801_uapsta.bin" 50b7450e24SGanapathi Bhat #define USB8997_DEFAULT_FW_NAME "mrvl/usbusb8997_combo_v4.bin" 51277b024eSKalle Valo 52277b024eSKalle Valo #define FW_DNLD_TX_BUF_SIZE 620 53277b024eSKalle Valo #define FW_DNLD_RX_BUF_SIZE 2048 54277b024eSKalle Valo #define FW_HAS_LAST_BLOCK 0x00000004 5578776467SGanapathi Bhat #define FW_CMD_7 0x00000007 56277b024eSKalle Valo 57277b024eSKalle Valo #define FW_DATA_XMIT_SIZE \ 58277b024eSKalle Valo (sizeof(struct fw_header) + dlen + sizeof(u32)) 59277b024eSKalle Valo 60277b024eSKalle Valo struct urb_context { 61277b024eSKalle Valo struct mwifiex_adapter *adapter; 62277b024eSKalle Valo struct sk_buff *skb; 63277b024eSKalle Valo struct urb *urb; 64277b024eSKalle Valo u8 ep; 65277b024eSKalle Valo }; 66277b024eSKalle Valo 67277b024eSKalle Valo struct usb_tx_data_port { 68277b024eSKalle Valo u8 tx_data_ep; 69277b024eSKalle Valo u8 block_status; 70277b024eSKalle Valo atomic_t tx_data_urb_pending; 71277b024eSKalle Valo int tx_data_ix; 72277b024eSKalle Valo struct urb_context tx_data_list[MWIFIEX_TX_DATA_URB]; 73277b024eSKalle Valo }; 74277b024eSKalle Valo 75277b024eSKalle Valo struct usb_card_rec { 76277b024eSKalle Valo struct mwifiex_adapter *adapter; 77277b024eSKalle Valo struct usb_device *udev; 78277b024eSKalle Valo struct usb_interface *intf; 79*4a79aa17SBrian Norris struct completion fw_done; 80277b024eSKalle Valo u8 rx_cmd_ep; 81277b024eSKalle Valo struct urb_context rx_cmd; 82277b024eSKalle Valo atomic_t rx_cmd_urb_pending; 83277b024eSKalle Valo struct urb_context rx_data_list[MWIFIEX_RX_DATA_URB]; 84277b024eSKalle Valo u8 usb_boot_state; 85277b024eSKalle Valo u8 rx_data_ep; 86277b024eSKalle Valo atomic_t rx_data_urb_pending; 87277b024eSKalle Valo u8 tx_cmd_ep; 88277b024eSKalle Valo atomic_t tx_cmd_urb_pending; 89277b024eSKalle Valo int bulk_out_maxpktsize; 90277b024eSKalle Valo struct urb_context tx_cmd; 91277b024eSKalle Valo u8 mc_resync_flag; 92277b024eSKalle Valo struct usb_tx_data_port port[MWIFIEX_TX_DATA_PORT]; 93277b024eSKalle Valo }; 94277b024eSKalle Valo 95277b024eSKalle Valo struct fw_header { 96277b024eSKalle Valo __le32 dnld_cmd; 97277b024eSKalle Valo __le32 base_addr; 98277b024eSKalle Valo __le32 data_len; 99277b024eSKalle Valo __le32 crc; 100277b024eSKalle Valo }; 101277b024eSKalle Valo 102277b024eSKalle Valo struct fw_sync_header { 103277b024eSKalle Valo __le32 cmd; 104277b024eSKalle Valo __le32 seq_num; 105277b024eSKalle Valo }; 106277b024eSKalle Valo 107277b024eSKalle Valo struct fw_data { 108277b024eSKalle Valo struct fw_header fw_hdr; 109277b024eSKalle Valo __le32 seq_num; 110277b024eSKalle Valo u8 data[1]; 111277b024eSKalle Valo }; 112277b024eSKalle Valo 113277b024eSKalle Valo #endif /*_MWIFIEX_USB_H */ 114