| /* |
| * Copyright (c) 2010-2011 Atheros Communications Inc. |
| * |
| * Permission to use, copy, modify, and/or distribute this software for any |
| * purpose with or without fee is hereby granted, provided that the above |
| * copyright notice and this permission notice appear in all copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| */ |
| |
| #ifndef HTC_USB_H |
| #define HTC_USB_H |
| |
| /* old firmware images */ |
| #define FIRMWARE_AR7010_1_1 "htc_7010.fw" |
| #define FIRMWARE_AR9271 "htc_9271.fw" |
| |
| /* supported Major FW version */ |
| #define MAJOR_VERSION_REQ 1 |
| #define MINOR_VERSION_REQ 3 |
| /* minimal and maximal supported Minor FW version. */ |
| #define FIRMWARE_MINOR_IDX_MAX 4 |
| #define FIRMWARE_MINOR_IDX_MIN 3 |
| #define HTC_FW_PATH "ath9k_htc" |
| |
| #define HTC_9271_MODULE_FW HTC_FW_PATH "/htc_9271-" \ |
| __stringify(MAJOR_VERSION_REQ) \ |
| "." __stringify(FIRMWARE_MINOR_IDX_MAX) ".0.fw" |
| #define HTC_7010_MODULE_FW HTC_FW_PATH "/htc_7010-" \ |
| __stringify(MAJOR_VERSION_REQ) \ |
| "." __stringify(FIRMWARE_MINOR_IDX_MAX) ".0.fw" |
| |
| extern int htc_use_dev_fw; |
| |
| #define IS_AR7010_DEVICE(_v) (((_v) == AR9280_USB) || ((_v) == AR9287_USB)) |
| |
| #define AR9271_FIRMWARE 0x501000 |
| #define AR9271_FIRMWARE_TEXT 0x903000 |
| #define AR7010_FIRMWARE_TEXT 0x906000 |
| |
| #define FIRMWARE_DOWNLOAD 0x30 |
| #define FIRMWARE_DOWNLOAD_COMP 0x31 |
| |
| #define ATH_USB_RX_STREAM_MODE_TAG 0x4e00 |
| #define ATH_USB_TX_STREAM_MODE_TAG 0x697e |
| |
| /* FIXME: Verify these numbers (with Windows) */ |
| #define MAX_TX_URB_NUM 8 |
| #define MAX_TX_BUF_NUM 256 |
| #define MAX_TX_BUF_SIZE 32768 |
| #define MAX_TX_AGGR_NUM 20 |
| |
| #define MAX_RX_URB_NUM 8 |
| #define MAX_RX_BUF_SIZE 16384 |
| #define MAX_PKT_NUM_IN_TRANSFER 10 |
| |
| #define MAX_REG_OUT_URB_NUM 1 |
| #define MAX_REG_IN_URB_NUM 64 |
| |
| #define MAX_REG_IN_BUF_SIZE 64 |
| |
| /* USB Endpoint definition */ |
| #define USB_WLAN_TX_PIPE 1 |
| #define USB_WLAN_RX_PIPE 2 |
| #define USB_REG_IN_PIPE 3 |
| #define USB_REG_OUT_PIPE 4 |
| |
| #define USB_MSG_TIMEOUT 1000 /* (ms) */ |
| |
| #define HIF_USB_MAX_RXPIPES 2 |
| #define HIF_USB_MAX_TXPIPES 4 |
| |
| struct tx_buf { |
| u8 *buf; |
| u16 len; |
| u16 offset; |
| struct urb *urb; |
| struct sk_buff_head skb_queue; |
| struct hif_device_usb *hif_dev; |
| struct list_head list; |
| }; |
| |
| struct rx_buf { |
| struct sk_buff *skb; |
| struct hif_device_usb *hif_dev; |
| }; |
| |
| #define HIF_USB_TX_STOP BIT(0) |
| #define HIF_USB_TX_FLUSH BIT(1) |
| |
| struct hif_usb_tx { |
| u8 flags; |
| u8 tx_buf_cnt; |
| u16 tx_skb_cnt; |
| struct sk_buff_head tx_skb_queue; |
| struct list_head tx_buf; |
| struct list_head tx_pending; |
| spinlock_t tx_lock; |
| }; |
| |
| struct cmd_buf { |
| struct sk_buff *skb; |
| struct hif_device_usb *hif_dev; |
| }; |
| |
| #define HIF_USB_START BIT(0) |
| #define HIF_USB_READY BIT(1) |
| |
| struct hif_device_usb { |
| struct usb_device *udev; |
| struct usb_interface *interface; |
| const struct usb_device_id *usb_device_id; |
| const void *fw_data; |
| size_t fw_size; |
| struct completion fw_done; |
| struct htc_target *htc_handle; |
| struct hif_usb_tx tx; |
| struct usb_anchor regout_submitted; |
| struct usb_anchor rx_submitted; |
| struct usb_anchor reg_in_submitted; |
| struct usb_anchor mgmt_submitted; |
| struct sk_buff *remain_skb; |
| char fw_name[32]; |
| int fw_minor_index; |
| int rx_remain_len; |
| int rx_pkt_len; |
| int rx_transfer_len; |
| int rx_pad_len; |
| spinlock_t rx_lock; |
| u8 flags; /* HIF_USB_* */ |
| }; |
| |
| int ath9k_hif_usb_init(void); |
| void ath9k_hif_usb_exit(void); |
| void ath9k_hif_usb_dealloc_urbs(struct hif_device_usb *hif_dev); |
| |
| #endif /* HTC_USB_H */ |