Root/target/linux/s3c24xx/files-2.6.30/drivers/ar6000/ar6000/ar6000_drv.h

1/*
2 *
3 * Copyright (c) 2004-2007 Atheros Communications Inc.
4 * All rights reserved.
5 *
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation;
10 *
11 * Software distributed under the License is distributed on an "AS
12 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
13 * implied. See the License for the specific language governing
14 * rights and limitations under the License.
15 *
16 *
17 *
18 */
19
20#ifndef _AR6000_H_
21#define _AR6000_H_
22
23#include <linux/version.h>
24
25
26#include <linux/autoconf.h>
27#include <linux/init.h>
28#include <linux/kernel.h>
29#include <linux/spinlock.h>
30#include <linux/skbuff.h>
31#include <linux/if_ether.h>
32#include <linux/netdevice.h>
33#include <linux/etherdevice.h>
34#include <net/iw_handler.h>
35#include <linux/if_arp.h>
36#include <linux/ip.h>
37#include <linux/semaphore.h>
38#include <linux/wireless.h>
39#include <linux/module.h>
40#include <asm/io.h>
41
42#include <a_config.h>
43#include <athdefs.h>
44#include "a_types.h"
45#include "a_osapi.h"
46#include "htc_api.h"
47#include "wmi.h"
48#include "a_drv.h"
49#include "bmi.h"
50#include <ieee80211.h>
51#include <ieee80211_ioctl.h>
52#include <wlan_api.h>
53#include <wmi_api.h>
54#include "gpio_api.h"
55#include "gpio.h"
56#include <host_version.h>
57#include <linux/rtnetlink.h>
58#include <linux/init.h>
59#include <linux/moduleparam.h>
60#include "AR6Khwreg.h"
61#include "ar6000_api.h"
62#ifdef CONFIG_HOST_TCMD_SUPPORT
63#include <testcmd.h>
64#endif
65
66#include "targaddrs.h"
67#include "dbglog_api.h"
68#include "ar6000_diag.h"
69#include "common_drv.h"
70
71#ifndef __dev_put
72#define __dev_put(dev) dev_put(dev)
73#endif
74
75#ifdef USER_KEYS
76
77#define USER_SAVEDKEYS_STAT_INIT 0
78#define USER_SAVEDKEYS_STAT_RUN 1
79
80// TODO this needs to move into the AR_SOFTC struct
81struct USER_SAVEDKEYS {
82    struct ieee80211req_key ucast_ik;
83    struct ieee80211req_key bcast_ik;
84    CRYPTO_TYPE keyType;
85    A_BOOL keyOk;
86};
87#endif
88
89#define DBG_INFO 0x00000001
90#define DBG_ERROR 0x00000002
91#define DBG_WARNING 0x00000004
92#define DBG_SDIO 0x00000008
93#define DBG_HIF 0x00000010
94#define DBG_HTC 0x00000020
95#define DBG_WMI 0x00000040
96#define DBG_WMI2 0x00000080
97#define DBG_DRIVER 0x00000100
98
99#define DBG_DEFAULTS (DBG_ERROR|DBG_WARNING)
100
101
102#ifdef DEBUG
103#define AR_DEBUG_PRINTF(args...) if (debugdriver) A_PRINTF(args);
104#define AR_DEBUG2_PRINTF(args...) if (debugdriver >= 2) A_PRINTF(args);
105extern int debugdriver;
106#else
107#define AR_DEBUG_PRINTF(args...)
108#define AR_DEBUG2_PRINTF(args...)
109#endif
110
111A_STATUS ar6000_ReadRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
112A_STATUS ar6000_WriteRegDiag(HIF_DEVICE *hifDevice, A_UINT32 *address, A_UINT32 *data);
113
114#ifdef __cplusplus
115extern "C" {
116#endif
117
118#define MAX_AR6000 1
119#define AR6000_MAX_RX_BUFFERS 16
120#define AR6000_BUFFER_SIZE 1664
121#define AR6000_TX_TIMEOUT 10
122#define AR6000_ETH_ADDR_LEN 6
123#define AR6000_MAX_ENDPOINTS 4
124#define MAX_NODE_NUM 15
125#define MAX_COOKIE_NUM 150
126#define AR6000_HB_CHALLENGE_RESP_FREQ_DEFAULT 1
127#define AR6000_HB_CHALLENGE_RESP_MISS_THRES_DEFAULT 1
128
129enum {
130    DRV_HB_CHALLENGE = 0,
131    APP_HB_CHALLENGE
132};
133
134/* HTC RAW streams */
135typedef enum _HTC_RAW_STREAM_ID {
136    HTC_RAW_STREAM_NOT_MAPPED = -1,
137    HTC_RAW_STREAM_0 = 0,
138    HTC_RAW_STREAM_1 = 1,
139    HTC_RAW_STREAM_2 = 2,
140    HTC_RAW_STREAM_3 = 3,
141    HTC_RAW_STREAM_NUM_MAX
142} HTC_RAW_STREAM_ID;
143
144#define RAW_HTC_READ_BUFFERS_NUM 4
145#define RAW_HTC_WRITE_BUFFERS_NUM 4
146
147typedef struct {
148    int currPtr;
149    int length;
150    unsigned char data[AR6000_BUFFER_SIZE];
151    HTC_PACKET HTCPacket;
152} raw_htc_buffer;
153
154#ifdef CONFIG_HOST_TCMD_SUPPORT
155/*
156 * add TCMD_MODE besides wmi and bypasswmi
157 * in TCMD_MODE, only few TCMD releated wmi commands
158 * counld be hanlder
159 */
160enum {
161    AR6000_WMI_MODE = 0,
162    AR6000_BYPASS_MODE,
163    AR6000_TCMD_MODE,
164    AR6000_WLAN_MODE
165};
166#endif /* CONFIG_HOST_TCMD_SUPPORT */
167
168struct ar_wep_key {
169    A_UINT8 arKeyIndex;
170    A_UINT8 arKeyLen;
171    A_UINT8 arKey[64];
172} ;
173
174struct ar_node_mapping {
175    A_UINT8 macAddress[6];
176    A_UINT8 epId;
177    A_UINT8 txPending;
178};
179
180struct ar_cookie {
181    A_UINT32 arc_bp[2]; /* Must be first field */
182    HTC_PACKET HtcPkt; /* HTC packet wrapper */
183    struct ar_cookie *arc_list_next;
184};
185
186struct ar_hb_chlng_resp {
187    A_TIMER timer;
188    A_UINT32 frequency;
189    A_UINT32 seqNum;
190    A_BOOL outstanding;
191    A_UINT8 missCnt;
192    A_UINT8 missThres;
193};
194
195typedef struct ar6_softc {
196    struct net_device *arNetDev; /* net_device pointer */
197    void *arWmi;
198    int arTxPending[WMI_PRI_MAX_COUNT];
199    int arTotalTxDataPending;
200    A_UINT8 arNumDataEndPts;
201    A_BOOL arWmiEnabled;
202    A_BOOL arWmiReady;
203    A_BOOL arConnected;
204    A_BOOL arRadioSwitch;
205    HTC_HANDLE arHtcTarget;
206    void *arHifDevice;
207    spinlock_t arLock;
208    struct semaphore arSem;
209    int arRxBuffers[WMI_PRI_MAX_COUNT];
210    int arSsidLen;
211    u_char arSsid[32];
212    A_UINT8 arNetworkType;
213    A_UINT8 arDot11AuthMode;
214    A_UINT8 arAuthMode;
215    A_UINT8 arPairwiseCrypto;
216    A_UINT8 arPairwiseCryptoLen;
217    A_UINT8 arGroupCrypto;
218    A_UINT8 arGroupCryptoLen;
219    A_UINT8 arDefTxKeyIndex;
220    struct ar_wep_key arWepKeyList[WMI_MAX_KEY_INDEX + 1];
221    A_UINT8 arBssid[6];
222    A_UINT8 arReqBssid[6];
223    A_UINT16 arChannelHint;
224    A_UINT16 arBssChannel;
225    A_UINT16 arListenInterval;
226    struct ar6000_version arVersion;
227    A_UINT32 arTargetType;
228    A_INT8 arRssi;
229    A_UINT8 arTxPwr;
230    A_BOOL arTxPwrSet;
231    A_INT32 arBitRate;
232    struct net_device_stats arNetStats;
233    struct iw_statistics arIwStats;
234    A_INT8 arNumChannels;
235    A_UINT16 arChannelList[32];
236    A_UINT32 arRegCode;
237    A_BOOL statsUpdatePending;
238    TARGET_STATS arTargetStats;
239    A_INT8 arMaxRetries;
240    A_UINT8 arPhyCapability;
241#ifdef CONFIG_HOST_TCMD_SUPPORT
242    A_UINT8 tcmdRxReport;
243    A_UINT32 tcmdRxTotalPkt;
244    A_INT32 tcmdRxRssi;
245    A_UINT32 tcmdPm;
246   A_UINT32 arTargetMode;
247#endif
248    AR6000_WLAN_STATE arWlanState;
249    struct ar_node_mapping arNodeMap[MAX_NODE_NUM];
250    A_UINT8 arIbssPsEnable;
251    A_UINT8 arNodeNum;
252    A_UINT8 arNexEpId;
253    struct ar_cookie *arCookieList;
254    A_UINT16 arRateMask;
255    A_UINT8 arSkipScan;
256    A_UINT16 arBeaconInterval;
257    A_BOOL arConnectPending;
258    A_BOOL arWmmEnabled;
259    struct ar_hb_chlng_resp arHBChallengeResp;
260    A_UINT8 arKeepaliveConfigured;
261    A_UINT32 arMgmtFilter;
262    HTC_ENDPOINT_ID arWmi2EpMapping[WMI_PRI_MAX_COUNT];
263    WMI_PRI_STREAM_ID arEp2WmiMapping[ENDPOINT_MAX];
264#ifdef HTC_RAW_INTERFACE
265    HTC_ENDPOINT_ID arRaw2EpMapping[HTC_RAW_STREAM_NUM_MAX];
266    HTC_RAW_STREAM_ID arEp2RawMapping[ENDPOINT_MAX];
267    struct semaphore raw_htc_read_sem[HTC_RAW_STREAM_NUM_MAX];
268    struct semaphore raw_htc_write_sem[HTC_RAW_STREAM_NUM_MAX];
269    wait_queue_head_t raw_htc_read_queue[HTC_RAW_STREAM_NUM_MAX];
270    wait_queue_head_t raw_htc_write_queue[HTC_RAW_STREAM_NUM_MAX];
271    raw_htc_buffer *raw_htc_read_buffer[HTC_RAW_STREAM_NUM_MAX][RAW_HTC_READ_BUFFERS_NUM];
272    raw_htc_buffer *raw_htc_write_buffer[HTC_RAW_STREAM_NUM_MAX][RAW_HTC_WRITE_BUFFERS_NUM];
273    A_BOOL write_buffer_available[HTC_RAW_STREAM_NUM_MAX];
274    A_BOOL read_buffer_available[HTC_RAW_STREAM_NUM_MAX];
275#endif
276    A_BOOL arRawIfInit;
277    int arDeviceIndex;
278    COMMON_CREDIT_STATE_INFO arCreditStateInfo;
279    A_BOOL arWMIControlEpFull;
280    A_BOOL dbgLogFetchInProgress;
281    A_UCHAR log_buffer[DBGLOG_HOST_LOG_BUFFER_SIZE];
282    A_UINT32 log_cnt;
283    A_UINT32 dbglog_init_done;
284    A_UINT32 arConnectCtrlFlags;
285    A_UINT32 scan_complete;
286#ifdef USER_KEYS
287    A_INT32 user_savedkeys_stat;
288    A_UINT32 user_key_ctrl;
289    struct USER_SAVEDKEYS user_saved_keys;
290#endif
291} AR_SOFTC_T;
292
293
294#define arWMIStream2EndpointID(ar,wmi) (ar)->arWmi2EpMapping[(wmi)]
295#define arSetWMIStream2EndpointIDMap(ar,wmi,ep) \
296{ (ar)->arWmi2EpMapping[(wmi)] = (ep); \
297   (ar)->arEp2WmiMapping[(ep)] = (wmi); }
298#define arEndpoint2WMIStreamID(ar,ep) (ar)->arEp2WmiMapping[(ep)]
299
300#define arRawIfEnabled(ar) (ar)->arRawIfInit
301#define arRawStream2EndpointID(ar,raw) (ar)->arRaw2EpMapping[(raw)]
302#define arSetRawStream2EndpointIDMap(ar,raw,ep) \
303{ (ar)->arRaw2EpMapping[(raw)] = (ep); \
304   (ar)->arEp2RawMapping[(ep)] = (raw); }
305#define arEndpoint2RawStreamID(ar,ep) (ar)->arEp2RawMapping[(ep)]
306
307struct ar_giwscan_param {
308    char *current_ev;
309    char *end_buf;
310    A_BOOL firstPass;
311};
312
313#define AR6000_STAT_INC(ar, stat) (ar->arNetStats.stat++)
314
315#define AR6000_SPIN_LOCK(lock, param) do { \
316    if (irqs_disabled()) { \
317        AR_DEBUG_PRINTF("IRQs disabled:AR6000_LOCK\n"); \
318    } \
319    spin_lock_bh(lock); \
320} while (0)
321
322#define AR6000_SPIN_UNLOCK(lock, param) do { \
323    if (irqs_disabled()) { \
324        AR_DEBUG_PRINTF("IRQs disabled: AR6000_UNLOCK\n"); \
325    } \
326    spin_unlock_bh(lock); \
327} while (0)
328
329int ar6000_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
330int ar6000_ioctl_dispatcher(struct net_device *dev, struct ifreq *rq, int cmd);
331void ar6000_ioctl_iwsetup(struct iw_handler_def *def);
332void ar6000_gpio_init(void);
333void ar6000_init_profile_info(AR_SOFTC_T *ar);
334void ar6000_install_static_wep_keys(AR_SOFTC_T *ar);
335int ar6000_init(struct net_device *dev);
336int ar6000_dbglog_get_debug_logs(AR_SOFTC_T *ar);
337A_STATUS ar6000_SetHTCBlockSize(AR_SOFTC_T *ar);
338
339#ifdef HTC_RAW_INTERFACE
340
341#ifndef __user
342#define __user
343#endif
344
345int ar6000_htc_raw_open(AR_SOFTC_T *ar);
346int ar6000_htc_raw_close(AR_SOFTC_T *ar);
347ssize_t ar6000_htc_raw_read(AR_SOFTC_T *ar,
348                            HTC_RAW_STREAM_ID StreamID,
349                            char __user *buffer, size_t count);
350ssize_t ar6000_htc_raw_write(AR_SOFTC_T *ar,
351                             HTC_RAW_STREAM_ID StreamID,
352                             char __user *buffer, size_t count);
353
354#endif /* HTC_RAW_INTERFACE */
355
356#ifdef __cplusplus
357}
358#endif
359
360#endif /* _AR6000_H_ */
361

Archive Download this file



interactive