forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.7 KiB
143 lines
3.7 KiB
/* |
|
* 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 */
|
|
|