| Index: chromeos/drivers/ath6kl/os/linux/include/ar6000_drv.h
 | 
| diff --git a/chromeos/drivers/ath6kl/os/linux/include/ar6000_drv.h b/chromeos/drivers/ath6kl/os/linux/include/ar6000_drv.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..4d11b982ae0c6bfdc732d7bd4bcfad81bf0a3b11
 | 
| --- /dev/null
 | 
| +++ b/chromeos/drivers/ath6kl/os/linux/include/ar6000_drv.h
 | 
| @@ -0,0 +1,589 @@
 | 
| +/*
 | 
| + *
 | 
| + * Copyright (c) 2004-2010 Atheros Communications Inc.
 | 
| + * All rights reserved.
 | 
| + *
 | 
| + * 
 | 
| +// This program is free software; you can redistribute it and/or modify
 | 
| +// it under the terms of the GNU General Public License version 2 as
 | 
| +// published by the Free Software Foundation;
 | 
| +//
 | 
| +// Software distributed under the License is distributed on an "AS
 | 
| +// IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
 | 
| +// implied. See the License for the specific language governing
 | 
| +// rights and limitations under the License.
 | 
| +//
 | 
| +//
 | 
| + *
 | 
| + */
 | 
| +
 | 
| +#ifndef _AR6000_H_
 | 
| +#define _AR6000_H_
 | 
| +
 | 
| +#include <linux/version.h>
 | 
| +
 | 
| +
 | 
| +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
 | 
| +#include <linux/config.h>
 | 
| +#else
 | 
| +#include <linux/autoconf.h>
 | 
| +#endif
 | 
| +#include <linux/init.h>
 | 
| +#include <linux/kernel.h>
 | 
| +#include <linux/spinlock.h>
 | 
| +#include <linux/skbuff.h>
 | 
| +#include <linux/if_ether.h>
 | 
| +#include <linux/netdevice.h>
 | 
| +#include <linux/etherdevice.h>
 | 
| +#include <net/iw_handler.h>
 | 
| +#include <linux/if_arp.h>
 | 
| +#include <linux/ip.h>
 | 
| +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
 | 
| +#include <asm/semaphore.h>
 | 
| +#else
 | 
| +#include <linux/semaphore.h>
 | 
| +#endif
 | 
| +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,32)
 | 
| +#include <linux/sched.h>
 | 
| +#endif
 | 
| +#include <linux/wireless.h>
 | 
| +#ifdef CONFIG_CFG80211
 | 
| +#include <net/cfg80211.h>
 | 
| +#endif /* CONFIG_CFG80211 */
 | 
| +#include <linux/module.h>
 | 
| +#include <asm/io.h>
 | 
| +
 | 
| +#include <a_config.h>
 | 
| +#include <athdefs.h>
 | 
| +#include "a_types.h"
 | 
| +#include "a_osapi.h"
 | 
| +#include "htc_api.h"
 | 
| +#include "wmi.h"
 | 
| +#include "a_drv.h"
 | 
| +#include "bmi.h"
 | 
| +#include <ieee80211.h>
 | 
| +#include <ieee80211_ioctl.h>
 | 
| +#include <wlan_api.h>
 | 
| +#include <wmi_api.h>
 | 
| +#include "gpio_api.h"
 | 
| +#include "gpio.h"
 | 
| +#include "pkt_log.h"
 | 
| +#include "aggr_recv_api.h"
 | 
| +#include <host_version.h>
 | 
| +#include <linux/rtnetlink.h>
 | 
| +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
 | 
| +#include <asm/uaccess.h>
 | 
| +#else
 | 
| +#include <linux/init.h>
 | 
| +#include <linux/moduleparam.h>
 | 
| +#endif
 | 
| +#include "ar6000_api.h"
 | 
| +#ifdef CONFIG_HOST_TCMD_SUPPORT
 | 
| +#include <testcmd.h>
 | 
| +#endif
 | 
| +#include <linux/firmware.h>
 | 
| +
 | 
| +#include "targaddrs.h"
 | 
| +#include "dbglog_api.h"
 | 
| +#include "ar6000_diag.h"
 | 
| +#include "common_drv.h"
 | 
| +#include "roaming.h"
 | 
| +#include "hci_transport_api.h"
 | 
| +#define ATH_MODULE_NAME driver
 | 
| +#include "a_debug.h"
 | 
| +#include "hw/apb_map.h"
 | 
| +#include "hw/rtc_reg.h"
 | 
| +#include "hw/mbox_reg.h"
 | 
| +
 | 
| +#define  ATH_DEBUG_DBG_LOG       ATH_DEBUG_MAKE_MODULE_MASK(0)
 | 
| +#define  ATH_DEBUG_WLAN_CONNECT  ATH_DEBUG_MAKE_MODULE_MASK(1)
 | 
| +#define  ATH_DEBUG_WLAN_SCAN     ATH_DEBUG_MAKE_MODULE_MASK(2)
 | 
| +#define  ATH_DEBUG_WLAN_TX       ATH_DEBUG_MAKE_MODULE_MASK(3)
 | 
| +#define  ATH_DEBUG_WLAN_RX       ATH_DEBUG_MAKE_MODULE_MASK(4)
 | 
| +#define  ATH_DEBUG_HTC_RAW       ATH_DEBUG_MAKE_MODULE_MASK(5)
 | 
| +#define  ATH_DEBUG_HCI_BRIDGE    ATH_DEBUG_MAKE_MODULE_MASK(6)
 | 
| +#define  ATH_DEBUG_HCI_RECV      ATH_DEBUG_MAKE_MODULE_MASK(7)
 | 
| +#define  ATH_DEBUG_HCI_SEND      ATH_DEBUG_MAKE_MODULE_MASK(8)
 | 
| +#define  ATH_DEBUG_HCI_DUMP      ATH_DEBUG_MAKE_MODULE_MASK(9)
 | 
| +
 | 
| +#ifndef  __dev_put
 | 
| +#define  __dev_put(dev) dev_put(dev)
 | 
| +#endif
 | 
| +
 | 
| +
 | 
| +#ifdef USER_KEYS
 | 
| +
 | 
| +#define USER_SAVEDKEYS_STAT_INIT     0
 | 
| +#define USER_SAVEDKEYS_STAT_RUN      1
 | 
| +
 | 
| +// TODO this needs to move into the AR_SOFTC struct
 | 
| +struct USER_SAVEDKEYS {
 | 
| +    struct ieee80211req_key   ucast_ik;
 | 
| +    struct ieee80211req_key   bcast_ik;
 | 
| +    CRYPTO_TYPE               keyType;
 | 
| +    A_BOOL                    keyOk;
 | 
| +};
 | 
| +#endif
 | 
| +
 | 
| +#define DBG_INFO        0x00000001
 | 
| +#define DBG_ERROR       0x00000002
 | 
| +#define DBG_WARNING     0x00000004
 | 
| +#define DBG_SDIO        0x00000008
 | 
| +#define DBG_HIF         0x00000010
 | 
| +#define DBG_HTC         0x00000020
 | 
| +#define DBG_WMI         0x00000040
 | 
| +#define DBG_WMI2        0x00000080
 | 
| +#define DBG_DRIVER      0x00000100
 | 
| +
 | 
| +#define DBG_DEFAULTS    (DBG_ERROR|DBG_WARNING)
 | 
| +
 | 
| +
 | 
| +A_STATUS ar6000_ReadRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
 | 
| +A_STATUS ar6000_WriteRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
 | 
| +
 | 
| +#ifdef __cplusplus
 | 
| +extern "C" {
 | 
| +#endif
 | 
| +
 | 
| +#define MAX_AR6000                        1
 | 
| +#define AR6000_MAX_RX_BUFFERS             16
 | 
| +#define AR6000_BUFFER_SIZE                1664
 | 
| +#define AR6000_MAX_AMSDU_RX_BUFFERS       4
 | 
| +#define AR6000_AMSDU_REFILL_THRESHOLD     3
 | 
| +#define AR6000_AMSDU_BUFFER_SIZE          (WMI_MAX_AMSDU_RX_DATA_FRAME_LENGTH + 128)
 | 
| +#define AR6000_MAX_RX_MESSAGE_SIZE        (max(WMI_MAX_NORMAL_RX_DATA_FRAME_LENGTH,WMI_MAX_AMSDU_RX_DATA_FRAME_LENGTH))
 | 
| +
 | 
| +#define AR6000_TX_TIMEOUT                 10
 | 
| +#define AR6000_ETH_ADDR_LEN               6
 | 
| +#define AR6000_MAX_ENDPOINTS              4
 | 
| +#define MAX_NODE_NUM                      15
 | 
| +/* MAX_HI_COOKIE_NUM are reserved for high priority traffic */
 | 
| +#define MAX_DEF_COOKIE_NUM                150
 | 
| +#define MAX_HI_COOKIE_NUM                 15 /* 10% of MAX_COOKIE_NUM */
 | 
| +#define MAX_COOKIE_NUM                    (MAX_DEF_COOKIE_NUM + MAX_HI_COOKIE_NUM)
 | 
| +
 | 
| +/* MAX_DEFAULT_SEND_QUEUE_DEPTH is used to set the default queue depth for the
 | 
| + * WMM send queues.  If a queue exceeds this depth htc will query back to the
 | 
| + * OS specific layer by calling EpSendFull().  This gives the OS layer the
 | 
| + * opportunity to drop the packet if desired.  Therefore changing
 | 
| + * MAX_DEFAULT_SEND_QUEUE_DEPTH does not affect resource utilization but
 | 
| + * does impact the threshold used to identify if a packet should be
 | 
| + * dropped. */
 | 
| +#define MAX_DEFAULT_SEND_QUEUE_DEPTH      (MAX_DEF_COOKIE_NUM / WMM_NUM_AC)
 | 
| +
 | 
| +#define AR6000_HB_CHALLENGE_RESP_FREQ_DEFAULT        1
 | 
| +#define AR6000_HB_CHALLENGE_RESP_MISS_THRES_DEFAULT  1
 | 
| +#define A_DISCONNECT_TIMER_INTERVAL       10 * 1000
 | 
| +
 | 
| +enum {
 | 
| +    DRV_HB_CHALLENGE = 0,
 | 
| +    APP_HB_CHALLENGE
 | 
| +};
 | 
| +
 | 
| +enum {
 | 
| +    WLAN_INIT_MODE_NONE = 0,
 | 
| +    WLAN_INIT_MODE_USR,
 | 
| +    WLAN_INIT_MODE_UDEV,
 | 
| +    WLAN_INIT_MODE_DRV
 | 
| +};
 | 
| +
 | 
| +#define AR6003_HW10_CONFIG       "AR6003_HW10_CONFIG"
 | 
| +
 | 
| +#ifdef INIT_MODE_DRV_ENABLED
 | 
| +#ifdef AR6003
 | 
| +#ifdef HW10
 | 
| +#define DATA_DOWNLOAD_ADDRESS    0x542800
 | 
| +#define PATCH_DOWNLOAD_ADDRESS   0x57ea6c
 | 
| +#define AR6K_OTP_DATA_FILE       "ath6k/AR6003/hw1.0/otp.data"
 | 
| +#define AR6K_OTP_BIN_FILE        "ath6k/AR6003/hw1.0/otp.bin"
 | 
| +#define AR6K_FIRMWARE_FILE       "ath6k/AR6003/hw1.0/athwlan.bin.z77"
 | 
| +#define AR6K_PATCH_FILE          "ath6k/AR6003/hw1.0/data.patch.bin"
 | 
| +#ifdef AR600x_SD31_XXX
 | 
| +#define AR6K_BOARD_DATA_FILE     "ath6k/AR6003/hw1.0/bdata.SD31.bin"
 | 
| +#elif defined(AR600x_SD32_XXX)
 | 
| +#define AR6K_BOARD_DATA_FILE     "ath6k/AR6003/hw1.0/bdata.SD32.bin"
 | 
| +#elif defined(AR600x_WB31_XXX)
 | 
| +#define AR6K_BOARD_DATA_FILE     "ath6k/AR6003/hw1.0/bdata.WB31.bin"
 | 
| +#elif defined(AR600x_CUSTOM_XXX)
 | 
| +#define AR6K_BOARD_DATA_FILE     "ath6k/AR6003/hw1.0/bdata.CUSTOM.bin"
 | 
| +#else
 | 
| +#error Board Data File Not Specified
 | 
| +#endif /* Board Data File */
 | 
| +#elif defined(HW20)
 | 
| +#error Chip Revision Not Supported
 | 
| +#else
 | 
| +#error Chip Revision Not Supported
 | 
| +#endif /* Chip Revision */
 | 
| +#else
 | 
| +#error Chip Generation Not Supported
 | 
| +#endif /* Chip Generation */
 | 
| +#endif /* INIT_MODE_DRV_ENABLED */
 | 
| +
 | 
| +/* HTC RAW streams */
 | 
| +typedef enum _HTC_RAW_STREAM_ID {
 | 
| +    HTC_RAW_STREAM_NOT_MAPPED = -1,
 | 
| +    HTC_RAW_STREAM_0 = 0,
 | 
| +    HTC_RAW_STREAM_1 = 1,
 | 
| +    HTC_RAW_STREAM_2 = 2,
 | 
| +    HTC_RAW_STREAM_3 = 3,
 | 
| +    HTC_RAW_STREAM_NUM_MAX
 | 
| +} HTC_RAW_STREAM_ID;
 | 
| +
 | 
| +#define RAW_HTC_READ_BUFFERS_NUM    4
 | 
| +#define RAW_HTC_WRITE_BUFFERS_NUM   4
 | 
| +
 | 
| +#define HTC_RAW_BUFFER_SIZE  1664
 | 
| +
 | 
| +typedef struct {
 | 
| +    int currPtr;
 | 
| +    int length;
 | 
| +    unsigned char data[HTC_RAW_BUFFER_SIZE];
 | 
| +    HTC_PACKET    HTCPacket;
 | 
| +} raw_htc_buffer;
 | 
| +
 | 
| +#ifdef CONFIG_HOST_TCMD_SUPPORT
 | 
| +/*
 | 
| + *  add TCMD_MODE besides wmi and bypasswmi
 | 
| + *  in TCMD_MODE, only few TCMD releated wmi commands
 | 
| + *  counld be hanlder
 | 
| + */
 | 
| +enum {
 | 
| +    AR6000_WMI_MODE = 0,
 | 
| +    AR6000_BYPASS_MODE,
 | 
| +    AR6000_TCMD_MODE,
 | 
| +    AR6000_WLAN_MODE
 | 
| +};
 | 
| +#endif /* CONFIG_HOST_TCMD_SUPPORT */
 | 
| +
 | 
| +struct ar_wep_key {
 | 
| +    A_UINT8                 arKeyIndex;
 | 
| +    A_UINT8                 arKeyLen;
 | 
| +    A_UINT8                 arKey[64];
 | 
| +} ;
 | 
| +
 | 
| +#ifdef CONFIG_CFG80211
 | 
| +struct ar_key {
 | 
| +    A_UINT8     key[WLAN_MAX_KEY_LEN];
 | 
| +    A_UINT8     key_len;
 | 
| +    A_UINT8     seq[IW_ENCODE_SEQ_MAX_SIZE];
 | 
| +    A_UINT8     seq_len;
 | 
| +    A_UINT32    cipher;
 | 
| +};
 | 
| +#endif /* CONFIG_CFG80211 */
 | 
| +
 | 
| +
 | 
| +struct ar_node_mapping {
 | 
| +    A_UINT8                 macAddress[6];
 | 
| +    A_UINT8                 epId;
 | 
| +    A_UINT8                 txPending;
 | 
| +};
 | 
| +
 | 
| +struct ar_cookie {
 | 
| +    A_UINT32               arc_bp[2];    /* Must be first field */
 | 
| +    HTC_PACKET             HtcPkt;       /* HTC packet wrapper */
 | 
| +    struct ar_cookie *arc_list_next;
 | 
| +};
 | 
| +
 | 
| +struct ar_hb_chlng_resp {
 | 
| +    A_TIMER                 timer;
 | 
| +    A_UINT32                frequency;
 | 
| +    A_UINT32                seqNum;
 | 
| +    A_BOOL                  outstanding;
 | 
| +    A_UINT8                 missCnt;
 | 
| +    A_UINT8                 missThres;
 | 
| +};
 | 
| +
 | 
| +/* Per STA data, used in AP mode */
 | 
| +/*TODO: All this should move to OS independent dir */
 | 
| +
 | 
| +#define STA_PWR_MGMT_MASK 0x1
 | 
| +#define STA_PWR_MGMT_SHIFT 0x0
 | 
| +#define STA_PWR_MGMT_AWAKE 0x0
 | 
| +#define STA_PWR_MGMT_SLEEP 0x1
 | 
| +
 | 
| +#define STA_SET_PWR_SLEEP(sta) (sta->flags |= (STA_PWR_MGMT_MASK << STA_PWR_MGMT_SHIFT))
 | 
| +#define STA_CLR_PWR_SLEEP(sta) (sta->flags &= ~(STA_PWR_MGMT_MASK << STA_PWR_MGMT_SHIFT))
 | 
| +#define STA_IS_PWR_SLEEP(sta) ((sta->flags >> STA_PWR_MGMT_SHIFT) & STA_PWR_MGMT_MASK)
 | 
| +
 | 
| +#define STA_PS_POLLED_MASK 0x1
 | 
| +#define STA_PS_POLLED_SHIFT 0x1
 | 
| +#define STA_SET_PS_POLLED(sta) (sta->flags |= (STA_PS_POLLED_MASK << STA_PS_POLLED_SHIFT))
 | 
| +#define STA_CLR_PS_POLLED(sta) (sta->flags &= ~(STA_PS_POLLED_MASK << STA_PS_POLLED_SHIFT))
 | 
| +#define STA_IS_PS_POLLED(sta) (sta->flags & (STA_PS_POLLED_MASK << STA_PS_POLLED_SHIFT))
 | 
| +
 | 
| +typedef struct {
 | 
| +    A_UINT16                flags;
 | 
| +    A_UINT8                 mac[ATH_MAC_LEN];
 | 
| +    A_UINT8                 aid;
 | 
| +    A_UINT8                 keymgmt;
 | 
| +    A_UINT8                 ucipher;
 | 
| +    A_UINT8                 auth;
 | 
| +    A_UINT8                 wpa_ie[IEEE80211_MAX_IE];
 | 
| +    A_NETBUF_QUEUE_T        psq;    /* power save q */
 | 
| +    A_MUTEX_T               psqLock;
 | 
| +} sta_t;
 | 
| +
 | 
| +typedef struct ar6_softc {
 | 
| +    struct net_device       *arNetDev;    /* net_device pointer */
 | 
| +    void                    *arWmi;
 | 
| +    int                     arTxPending[ENDPOINT_MAX];
 | 
| +    int                     arTotalTxDataPending;
 | 
| +    A_UINT8                 arNumDataEndPts;
 | 
| +    A_BOOL                  arWmiEnabled;
 | 
| +    A_BOOL                  arWmiReady;
 | 
| +    A_BOOL                  arConnected;
 | 
| +    HTC_HANDLE              arHtcTarget;
 | 
| +    void                    *arHifDevice;
 | 
| +    spinlock_t              arLock;
 | 
| +    struct semaphore        arSem;
 | 
| +    int                     arSsidLen;
 | 
| +    u_char                  arSsid[32];
 | 
| +    A_UINT8                 arNextMode;
 | 
| +    A_UINT8                 arNetworkType;
 | 
| +    A_UINT8                 arDot11AuthMode;
 | 
| +    A_UINT8                 arAuthMode;
 | 
| +    A_UINT8                 arPairwiseCrypto;
 | 
| +    A_UINT8                 arPairwiseCryptoLen;
 | 
| +    A_UINT8                 arGroupCrypto;
 | 
| +    A_UINT8                 arGroupCryptoLen;
 | 
| +    A_UINT8                 arDefTxKeyIndex;
 | 
| +    struct ar_wep_key       arWepKeyList[WMI_MAX_KEY_INDEX + 1];
 | 
| +    A_UINT8                 arBssid[6];
 | 
| +    A_UINT8                 arReqBssid[6];
 | 
| +    A_UINT16                arChannelHint;
 | 
| +    A_UINT16                arBssChannel;
 | 
| +    A_UINT16                arListenInterval;
 | 
| +    struct ar6000_version   arVersion;
 | 
| +    A_UINT32                arTargetType;
 | 
| +    A_INT8                  arRssi;
 | 
| +    A_UINT8                 arTxPwr;
 | 
| +    A_BOOL                  arTxPwrSet;
 | 
| +    A_INT32                 arBitRate;
 | 
| +    struct net_device_stats arNetStats;
 | 
| +    struct iw_statistics    arIwStats;
 | 
| +    A_INT8                  arNumChannels;
 | 
| +    A_UINT16                arChannelList[32];
 | 
| +    A_UINT32                arRegCode;
 | 
| +    A_BOOL                  statsUpdatePending;
 | 
| +    TARGET_STATS            arTargetStats;
 | 
| +    A_INT8                  arMaxRetries;
 | 
| +    A_UINT8                 arPhyCapability;
 | 
| +#ifdef CONFIG_HOST_TCMD_SUPPORT
 | 
| +    A_UINT8                 tcmdRxReport;
 | 
| +    A_UINT32                tcmdRxTotalPkt;
 | 
| +    A_INT32                 tcmdRxRssi;
 | 
| +    A_UINT32                tcmdPm;
 | 
| +    A_UINT32                arTargetMode;
 | 
| +    A_UINT32                tcmdRxcrcErrPkt;
 | 
| +    A_UINT32                tcmdRxsecErrPkt;
 | 
| +    A_UINT16                tcmdRateCnt[TCMD_MAX_RATES];
 | 
| +    A_UINT16                tcmdRateCntShortGuard[TCMD_MAX_RATES];
 | 
| +#endif
 | 
| +    AR6000_WLAN_STATE       arWlanState;
 | 
| +    struct ar_node_mapping  arNodeMap[MAX_NODE_NUM];
 | 
| +    A_UINT8                 arIbssPsEnable;
 | 
| +    A_UINT8                 arNodeNum;
 | 
| +    A_UINT8                 arNexEpId;
 | 
| +    struct ar_cookie        *arCookieList;
 | 
| +    A_UINT32                arCookieCount;
 | 
| +    A_UINT32                arRateMask;
 | 
| +    A_UINT8                 arSkipScan;
 | 
| +    A_UINT16                arBeaconInterval;
 | 
| +    A_BOOL                  arConnectPending;
 | 
| +    A_BOOL                  arWmmEnabled;
 | 
| +    struct ar_hb_chlng_resp arHBChallengeResp;
 | 
| +    A_UINT8                 arKeepaliveConfigured;
 | 
| +    A_UINT32                arMgmtFilter;
 | 
| +    HTC_ENDPOINT_ID         arAc2EpMapping[WMM_NUM_AC];
 | 
| +    A_BOOL                  arAcStreamActive[WMM_NUM_AC];
 | 
| +    A_UINT8                 arAcStreamPriMap[WMM_NUM_AC];
 | 
| +    A_UINT8                 arHiAcStreamActivePri;
 | 
| +    A_UINT8                 arEp2AcMapping[ENDPOINT_MAX];
 | 
| +    HTC_ENDPOINT_ID         arControlEp;
 | 
| +#ifdef HTC_RAW_INTERFACE
 | 
| +    HTC_ENDPOINT_ID         arRaw2EpMapping[HTC_RAW_STREAM_NUM_MAX];
 | 
| +    HTC_RAW_STREAM_ID       arEp2RawMapping[ENDPOINT_MAX];
 | 
| +    struct semaphore        raw_htc_read_sem[HTC_RAW_STREAM_NUM_MAX];
 | 
| +    struct semaphore        raw_htc_write_sem[HTC_RAW_STREAM_NUM_MAX];
 | 
| +    wait_queue_head_t       raw_htc_read_queue[HTC_RAW_STREAM_NUM_MAX];
 | 
| +    wait_queue_head_t       raw_htc_write_queue[HTC_RAW_STREAM_NUM_MAX];
 | 
| +    raw_htc_buffer          raw_htc_read_buffer[HTC_RAW_STREAM_NUM_MAX][RAW_HTC_READ_BUFFERS_NUM];
 | 
| +    raw_htc_buffer          raw_htc_write_buffer[HTC_RAW_STREAM_NUM_MAX][RAW_HTC_WRITE_BUFFERS_NUM];
 | 
| +    A_BOOL                  write_buffer_available[HTC_RAW_STREAM_NUM_MAX];
 | 
| +    A_BOOL                  read_buffer_available[HTC_RAW_STREAM_NUM_MAX];
 | 
| +#endif
 | 
| +    A_BOOL                  arNetQueueStopped;
 | 
| +    A_BOOL                  arRawIfInit;
 | 
| +    int                     arDeviceIndex;
 | 
| +    COMMON_CREDIT_STATE_INFO arCreditStateInfo;
 | 
| +    A_BOOL                  arWMIControlEpFull;
 | 
| +    A_BOOL                  dbgLogFetchInProgress;
 | 
| +    A_UCHAR                 log_buffer[DBGLOG_HOST_LOG_BUFFER_SIZE];
 | 
| +    A_UINT32                log_cnt;
 | 
| +    A_UINT32                dbglog_init_done;
 | 
| +    A_UINT32                arConnectCtrlFlags;
 | 
| +#ifdef USER_KEYS
 | 
| +    A_INT32                 user_savedkeys_stat;
 | 
| +    A_UINT32                user_key_ctrl;
 | 
| +    struct USER_SAVEDKEYS   user_saved_keys;
 | 
| +#endif
 | 
| +    USER_RSSI_THOLD rssi_map[12];
 | 
| +    A_UINT8                arUserBssFilter;
 | 
| +    A_UINT16                ap_profile_flag;    /* AP mode */
 | 
| +    WMI_AP_ACL              g_acl;              /* AP mode */
 | 
| +    sta_t                   sta_list[AP_MAX_NUM_STA]; /* AP mode */
 | 
| +    A_UINT8                 sta_list_index;     /* AP mode */
 | 
| +    struct ieee80211req_key ap_mode_bkey;           /* AP mode */
 | 
| +    A_NETBUF_QUEUE_T        mcastpsq;    /* power save q for Mcast frames */
 | 
| +    A_MUTEX_T               mcastpsqLock;
 | 
| +    A_BOOL                  DTIMExpired; /* flag to indicate DTIM expired */
 | 
| +    A_UINT8                 intra_bss;   /* enable/disable intra bss data forward */
 | 
| +    void                    *aggr_cntxt;
 | 
| +#ifndef EXPORT_HCI_BRIDGE_INTERFACE
 | 
| +    void                    *hcidev_info;
 | 
| +#endif
 | 
| +    WMI_AP_MODE_STAT        arAPStats;
 | 
| +    A_UINT8                 ap_hidden_ssid;
 | 
| +    A_UINT8                 ap_country_code[3];
 | 
| +    A_UINT8                 ap_wmode;
 | 
| +    A_UINT8                 ap_dtim_period;
 | 
| +    A_UINT16                ap_beacon_interval;
 | 
| +    A_UINT16                arRTS;
 | 
| +    A_UINT16                arACS; /* AP mode - Auto Channel Selection */
 | 
| +    HTC_PACKET_QUEUE        amsdu_rx_buffer_queue;
 | 
| +    A_BOOL                  bIsDestroyProgress; /* flag to indicate ar6k destroy is in progress */
 | 
| +    A_TIMER                 disconnect_timer;
 | 
| +    A_UINT8		    rxMetaVersion;
 | 
| +#ifdef WAPI_ENABLE
 | 
| +    A_UINT8                 arWapiEnable;
 | 
| +#endif
 | 
| +	WMI_BTCOEX_CONFIG_EVENT arBtcoexConfig;
 | 
| +	WMI_BTCOEX_STATS_EVENT  arBtcoexStats;
 | 
| +    A_INT32                 (*exitCallback)(void *config);  /* generic callback at AR6K exit */
 | 
| +    HIF_DEVICE_OS_DEVICE_INFO   osDevInfo;
 | 
| +#ifdef CONFIG_CFG80211
 | 
| +    struct wireless_dev *wdev;
 | 
| +    struct cfg80211_scan_request    *scan_request;
 | 
| +    struct ar_key   keys[WMI_MAX_KEY_INDEX + 1];
 | 
| +#endif /* CONFIG_CFG80211 */
 | 
| +} AR_SOFTC_T;
 | 
| +
 | 
| +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
 | 
| +/* Looks like we need this for 2.4 kernels */
 | 
| +static inline void *ar6k_priv(struct net_device *dev)
 | 
| +{
 | 
| +    return(dev->priv);
 | 
| +}
 | 
| +#else
 | 
| +#ifdef CONFIG_CFG80211
 | 
| +static inline void *ar6k_priv(struct net_device *dev)
 | 
| +{
 | 
| +    return (wdev_priv(dev->ieee80211_ptr));
 | 
| +}
 | 
| +#else
 | 
| +#define ar6k_priv   netdev_priv
 | 
| +#endif /* CONFIG_CFG80211 */
 | 
| +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) */
 | 
| +
 | 
| +#define arAc2EndpointID(ar,ac)          (ar)->arAc2EpMapping[(ac)]
 | 
| +#define arSetAc2EndpointIDMap(ar,ac,ep)  \
 | 
| +{  (ar)->arAc2EpMapping[(ac)] = (ep); \
 | 
| +   (ar)->arEp2AcMapping[(ep)] = (ac); }
 | 
| +#define arEndpoint2Ac(ar,ep)           (ar)->arEp2AcMapping[(ep)]
 | 
| +
 | 
| +#define arRawIfEnabled(ar) (ar)->arRawIfInit
 | 
| +#define arRawStream2EndpointID(ar,raw)          (ar)->arRaw2EpMapping[(raw)]
 | 
| +#define arSetRawStream2EndpointIDMap(ar,raw,ep)  \
 | 
| +{  (ar)->arRaw2EpMapping[(raw)] = (ep); \
 | 
| +   (ar)->arEp2RawMapping[(ep)] = (raw); }
 | 
| +#define arEndpoint2RawStreamID(ar,ep)           (ar)->arEp2RawMapping[(ep)]
 | 
| +
 | 
| +struct ar_giwscan_param {
 | 
| +    char    *current_ev;
 | 
| +    char    *end_buf;
 | 
| +    A_UINT32 bytes_needed;
 | 
| +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
 | 
| +    struct iw_request_info *info;
 | 
| +#endif
 | 
| +};
 | 
| +
 | 
| +#define AR6000_STAT_INC(ar, stat)       (ar->arNetStats.stat++)
 | 
| +
 | 
| +#define AR6000_SPIN_LOCK(lock, param)   do {                            \
 | 
| +    if (irqs_disabled()) {                                              \
 | 
| +        AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("IRQs disabled:AR6000_LOCK\n"));                 \
 | 
| +    }                                                                   \
 | 
| +    spin_lock_bh(lock);                                                 \
 | 
| +} while (0)
 | 
| +
 | 
| +#define AR6000_SPIN_UNLOCK(lock, param) do {                            \
 | 
| +    if (irqs_disabled()) {                                              \
 | 
| +        AR_DEBUG_PRINTF(ATH_DEBUG_TRC,("IRQs disabled: AR6000_UNLOCK\n"));              \
 | 
| +    }                                                                   \
 | 
| +    spin_unlock_bh(lock);                                               \
 | 
| +} while (0)
 | 
| +
 | 
| +int ar6000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 | 
| +int ar6000_ioctl_dispatcher(struct net_device *dev, struct ifreq *rq, int cmd);
 | 
| +void ar6000_gpio_init(void);
 | 
| +void ar6000_init_profile_info(AR_SOFTC_T *ar);
 | 
| +void ar6000_install_static_wep_keys(AR_SOFTC_T *ar);
 | 
| +int ar6000_init(struct net_device *dev);
 | 
| +int ar6000_dbglog_get_debug_logs(AR_SOFTC_T *ar);
 | 
| +void ar6000_TxDataCleanup(AR_SOFTC_T *ar);
 | 
| +int ar6000_acl_data_tx(struct sk_buff *skb, struct net_device *dev);
 | 
| +
 | 
| +#ifdef HTC_RAW_INTERFACE
 | 
| +
 | 
| +#ifndef __user
 | 
| +#define __user
 | 
| +#endif
 | 
| +
 | 
| +int ar6000_htc_raw_open(AR_SOFTC_T *ar);
 | 
| +int ar6000_htc_raw_close(AR_SOFTC_T *ar);
 | 
| +ssize_t ar6000_htc_raw_read(AR_SOFTC_T *ar,
 | 
| +                            HTC_RAW_STREAM_ID StreamID,
 | 
| +                            char __user *buffer, size_t count);
 | 
| +ssize_t ar6000_htc_raw_write(AR_SOFTC_T *ar,
 | 
| +                             HTC_RAW_STREAM_ID StreamID,
 | 
| +                             char __user *buffer, size_t count);
 | 
| +
 | 
| +#endif /* HTC_RAW_INTERFACE */
 | 
| +
 | 
| +/* AP mode */
 | 
| +/*TODO: These routines should be moved to a file that is common across OS */
 | 
| +sta_t *
 | 
| +ieee80211_find_conn(AR_SOFTC_T *ar, A_UINT8 *node_addr);
 | 
| +
 | 
| +sta_t *
 | 
| +ieee80211_find_conn_for_aid(AR_SOFTC_T *ar, A_UINT8 aid);
 | 
| +
 | 
| +A_UINT8
 | 
| +remove_sta(AR_SOFTC_T *ar, A_UINT8 *mac, A_UINT16 reason);
 | 
| +
 | 
| +/* HCI support */
 | 
| +
 | 
| +#ifndef EXPORT_HCI_BRIDGE_INTERFACE
 | 
| +A_STATUS ar6000_setup_hci(AR_SOFTC_T *ar);
 | 
| +void     ar6000_cleanup_hci(AR_SOFTC_T *ar);
 | 
| +void     ar6000_set_default_ar3kconfig(AR_SOFTC_T *ar, void *ar3kconfig);
 | 
| +
 | 
| +/* HCI bridge testing */
 | 
| +A_STATUS hci_test_send(AR_SOFTC_T *ar, struct sk_buff *skb);
 | 
| +#endif
 | 
| +
 | 
| +ATH_DEBUG_DECLARE_EXTERN(htc);
 | 
| +ATH_DEBUG_DECLARE_EXTERN(wmi);
 | 
| +ATH_DEBUG_DECLARE_EXTERN(bmi);
 | 
| +ATH_DEBUG_DECLARE_EXTERN(hif);
 | 
| +ATH_DEBUG_DECLARE_EXTERN(wlan);
 | 
| +ATH_DEBUG_DECLARE_EXTERN(misc);
 | 
| +
 | 
| +extern A_UINT8 bcast_mac[];
 | 
| +extern A_UINT8 null_mac[];
 | 
| +
 | 
| +#ifdef __cplusplus
 | 
| +}
 | 
| +#endif
 | 
| +
 | 
| +#endif /* _AR6000_H_ */
 | 
| 
 |