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 23277b024eSKalle Valo #include <linux/usb.h> 24277b024eSKalle Valo 25277b024eSKalle Valo #define USB8XXX_VID 0x1286 26277b024eSKalle Valo 27277b024eSKalle Valo #define USB8766_PID_1 0x2041 28277b024eSKalle Valo #define USB8766_PID_2 0x2042 29277b024eSKalle Valo #define USB8797_PID_1 0x2043 30277b024eSKalle Valo #define USB8797_PID_2 0x2044 31277b024eSKalle Valo #define USB8801_PID_1 0x2049 32277b024eSKalle Valo #define USB8801_PID_2 0x204a 33277b024eSKalle Valo #define USB8997_PID_1 0x2052 34277b024eSKalle Valo #define USB8997_PID_2 0x204e 35277b024eSKalle Valo 36277b024eSKalle Valo 37277b024eSKalle Valo #define USB8XXX_FW_DNLD 1 38277b024eSKalle Valo #define USB8XXX_FW_READY 2 39277b024eSKalle Valo #define USB8XXX_FW_MAX_RETRY 3 40277b024eSKalle Valo 41277b024eSKalle Valo #define MWIFIEX_TX_DATA_PORT 2 42277b024eSKalle Valo #define MWIFIEX_TX_DATA_URB 6 43277b024eSKalle Valo #define MWIFIEX_RX_DATA_URB 6 44277b024eSKalle Valo #define MWIFIEX_USB_TIMEOUT 100 45277b024eSKalle Valo 46277b024eSKalle Valo #define USB8766_DEFAULT_FW_NAME "mrvl/usb8766_uapsta.bin" 47277b024eSKalle Valo #define USB8797_DEFAULT_FW_NAME "mrvl/usb8797_uapsta.bin" 48277b024eSKalle Valo #define USB8801_DEFAULT_FW_NAME "mrvl/usb8801_uapsta.bin" 49277b024eSKalle Valo #define USB8997_DEFAULT_FW_NAME "mrvl/usb8997_uapsta.bin" 50277b024eSKalle Valo 51277b024eSKalle Valo #define FW_DNLD_TX_BUF_SIZE 620 52277b024eSKalle Valo #define FW_DNLD_RX_BUF_SIZE 2048 53277b024eSKalle Valo #define FW_HAS_LAST_BLOCK 0x00000004 54*78776467SGanapathi Bhat #define FW_CMD_7 0x00000007 55277b024eSKalle Valo 56277b024eSKalle Valo #define FW_DATA_XMIT_SIZE \ 57277b024eSKalle Valo (sizeof(struct fw_header) + dlen + sizeof(u32)) 58277b024eSKalle Valo 59277b024eSKalle Valo struct urb_context { 60277b024eSKalle Valo struct mwifiex_adapter *adapter; 61277b024eSKalle Valo struct sk_buff *skb; 62277b024eSKalle Valo struct urb *urb; 63277b024eSKalle Valo u8 ep; 64277b024eSKalle Valo }; 65277b024eSKalle Valo 66277b024eSKalle Valo struct usb_tx_data_port { 67277b024eSKalle Valo u8 tx_data_ep; 68277b024eSKalle Valo u8 block_status; 69277b024eSKalle Valo atomic_t tx_data_urb_pending; 70277b024eSKalle Valo int tx_data_ix; 71277b024eSKalle Valo struct urb_context tx_data_list[MWIFIEX_TX_DATA_URB]; 72277b024eSKalle Valo }; 73277b024eSKalle Valo 74277b024eSKalle Valo struct usb_card_rec { 75277b024eSKalle Valo struct mwifiex_adapter *adapter; 76277b024eSKalle Valo struct usb_device *udev; 77277b024eSKalle Valo struct usb_interface *intf; 78277b024eSKalle Valo u8 rx_cmd_ep; 79277b024eSKalle Valo struct urb_context rx_cmd; 80277b024eSKalle Valo atomic_t rx_cmd_urb_pending; 81277b024eSKalle Valo struct urb_context rx_data_list[MWIFIEX_RX_DATA_URB]; 82277b024eSKalle Valo u8 usb_boot_state; 83277b024eSKalle Valo u8 rx_data_ep; 84277b024eSKalle Valo atomic_t rx_data_urb_pending; 85277b024eSKalle Valo u8 tx_cmd_ep; 86277b024eSKalle Valo atomic_t tx_cmd_urb_pending; 87277b024eSKalle Valo int bulk_out_maxpktsize; 88277b024eSKalle Valo struct urb_context tx_cmd; 89277b024eSKalle Valo u8 mc_resync_flag; 90277b024eSKalle Valo struct usb_tx_data_port port[MWIFIEX_TX_DATA_PORT]; 91277b024eSKalle Valo }; 92277b024eSKalle Valo 93277b024eSKalle Valo struct fw_header { 94277b024eSKalle Valo __le32 dnld_cmd; 95277b024eSKalle Valo __le32 base_addr; 96277b024eSKalle Valo __le32 data_len; 97277b024eSKalle Valo __le32 crc; 98277b024eSKalle Valo }; 99277b024eSKalle Valo 100277b024eSKalle Valo struct fw_sync_header { 101277b024eSKalle Valo __le32 cmd; 102277b024eSKalle Valo __le32 seq_num; 103277b024eSKalle Valo }; 104277b024eSKalle Valo 105277b024eSKalle Valo struct fw_data { 106277b024eSKalle Valo struct fw_header fw_hdr; 107277b024eSKalle Valo __le32 seq_num; 108277b024eSKalle Valo u8 data[1]; 109277b024eSKalle Valo }; 110277b024eSKalle Valo 111277b024eSKalle Valo #endif /*_MWIFIEX_USB_H */ 112