2 * Copyright (c) 2007-2008 Atheros Communications Inc.
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 /* Module Name : usbdrv.c */
19 /* This module contains network interface up/down related functions.*/
22 /* Platform dependent. */
24 /************************************************************************/
28 #define ZM_PIBSS_MODE 0
32 #define ZM_SHARE_AUTH 0
33 #define ZM_DISABLE_XMIT 0
37 #include "80211core/pub_zfi.h"
39 #include "linux/netlink.h"
40 #include "linux/rtnetlink.h"
43 #include <net/iw_handler.h>
46 #ifdef ZM_HOSTAPD_SUPPORT
47 #include "athr_common.h"
50 extern void zfDumpDescriptor(zdev_t
* dev
, u16_t type
);
51 //extern void zfiWlanQueryMacAddress(zdev_t* dev, u8_t* addr);
54 #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,0))
55 irqreturn_t
usbdrv_intr(int, void *, struct pt_regs
*);
57 void usbdrv_intr(int, void *, struct pt_regs
*);
60 // Network Device interface related function
61 int usbdrv_open(struct net_device
*);
62 int usbdrv_close(struct net_device
*);
63 int usbdrv_change_mtu(struct net_device
*, int);
64 int usbdrv_set_mac(struct net_device
*, void *);
65 int usbdrv_xmit_frame(struct sk_buff
*, struct net_device
*);
66 void usbdrv_set_multi(struct net_device
*);
67 struct net_device_stats
*usbdrv_get_stats(struct net_device
*);
69 //wireless extension helper functions
70 int usbdrv_ioctl_setessid(struct net_device
*dev
, struct iw_point
*erq
);
71 int usbdrv_ioctl_getessid(struct net_device
*dev
, struct iw_point
*erq
);
72 int usbdrv_ioctl_setrts(struct net_device
*dev
, struct iw_param
*rrq
);
73 /* Wireless Extension Handler functions */
74 int usbdrvwext_giwmode(struct net_device
*dev
, struct iw_request_info
* info
,
75 __u32
*mode
, char *extra
);
76 int zfLnxPrivateIoctl(struct usbdrv_private
*macp
, struct zdap_ioctl
*zdreq
);
78 void zfLnx10msTimer(struct net_device
* dev
);
79 int zfUnregisterWdsDev(struct net_device
* parentDev
, u16_t wdsId
);
80 int zfRegisterWdsDev(struct net_device
* parentDev
, u16_t wdsId
);
81 int zfWdsOpen(struct net_device
*dev
);
82 int zfWdsClose(struct net_device
*dev
);
83 int zfLnxVapOpen(struct net_device
*dev
);
84 int zfLnxVapClose(struct net_device
*dev
);
85 int zfLnxVapXmitFrame(struct sk_buff
*skb
, struct net_device
*dev
);
86 int zfLnxRegisterVapDev(struct net_device
* parentDev
, u16_t vapId
);
87 int usbdrv_wpa_ioctl(struct net_device
*dev
, struct athr_wlan_param
*zdparm
);
88 extern u16_t
zfLnxGetVapId(zdev_t
* dev
);
89 extern u16_t
zfLnxCheckTxBufferCnt(zdev_t
*dev
);
90 extern UsbTxQ_t
*zfLnxGetUsbTxBuffer(zdev_t
*dev
);
92 extern u16_t
zfLnxAuthNotify(zdev_t
* dev
, u16_t
* macAddr
);
93 extern u16_t
zfLnxAsocNotify(zdev_t
* dev
, u16_t
* macAddr
, u8_t
* body
, u16_t bodySize
, u16_t port
);
94 extern u16_t
zfLnxDisAsocNotify(zdev_t
* dev
, u8_t
* macAddr
, u16_t port
);
95 extern u16_t
zfLnxApConnectNotify(zdev_t
* dev
, u8_t
* macAddr
, u16_t port
);
96 extern void zfLnxConnectNotify(zdev_t
* dev
, u16_t status
, u16_t
* bssid
);
97 extern void zfLnxScanNotify(zdev_t
* dev
, struct zsScanResult
* result
);
98 extern void zfLnxStatisticsNotify(zdev_t
* dev
, struct zsStastics
* result
);
99 extern void zfLnxMicFailureNotify(zdev_t
* dev
, u16_t
* addr
, u16_t status
);
100 extern void zfLnxApMicFailureNotify(zdev_t
* dev
, u8_t
* addr
, zbuf_t
* buf
);
101 extern void zfLnxIbssPartnerNotify(zdev_t
* dev
, u16_t status
, struct zsPartnerNotifyEvent
*event
);
102 extern void zfLnxMacAddressNotify(zdev_t
* dev
, u8_t
* addr
);
103 extern void zfLnxSendCompleteIndication(zdev_t
* dev
, zbuf_t
* buf
);
104 extern void zfLnxRecvEth(zdev_t
* dev
, zbuf_t
* buf
, u16_t port
);
105 extern void zfLnxRestoreBufData(zdev_t
* dev
, zbuf_t
* buf
);
106 #ifdef ZM_ENABLE_CENC
107 extern u16_t
zfLnxCencAsocNotify(zdev_t
* dev
, u16_t
* macAddr
, u8_t
* body
, u16_t bodySize
, u16_t port
);
108 #endif //ZM_ENABLE_CENC
109 extern void zfLnxWatchDogNotify(zdev_t
* dev
);
110 extern void zfLnxRecv80211(zdev_t
* dev
, zbuf_t
* buf
, struct zsAdditionInfo
* addInfo
);
111 extern u8_t
zfLnxCreateThread(zdev_t
*dev
);
113 /******************************************************************************
114 * P U B L I C D A T A
115 *******************************************************************************
118 /* Definition of Wireless Extension */
120 #if WIRELESS_EXT > 12
121 #include <net/iw_handler.h>
123 //wireless extension helper functions
124 extern int usbdrv_ioctl_setessid(struct net_device
*dev
, struct iw_point
*erq
);
125 extern int usbdrv_ioctl_setrts(struct net_device
*dev
, struct iw_param
*rrq
);
126 /* Wireless Extension Handler functions */
127 extern int usbdrvwext_giwname(struct net_device
*dev
, struct iw_request_info
*info
,
128 union iwreq_data
*wrq
, char *extra
);
129 extern int usbdrvwext_siwfreq(struct net_device
*dev
, struct iw_request_info
*info
,
130 struct iw_freq
*freq
, char *extra
);
131 extern int usbdrvwext_giwfreq(struct net_device
*dev
, struct iw_request_info
*info
,
132 struct iw_freq
*freq
, char *extra
);
133 extern int usbdrvwext_siwmode(struct net_device
*dev
, struct iw_request_info
*info
,
134 union iwreq_data
*wrq
, char *extra
);
135 extern int usbdrvwext_giwmode(struct net_device
*dev
, struct iw_request_info
*info
,
136 __u32
*mode
, char *extra
);
137 extern int usbdrvwext_siwsens(struct net_device
*dev
, struct iw_request_info
*info
,
138 struct iw_param
*sens
, char *extra
);
139 extern int usbdrvwext_giwsens(struct net_device
*dev
, struct iw_request_info
*info
,
140 struct iw_param
*sens
, char *extra
);
141 extern int usbdrvwext_giwrange(struct net_device
*dev
, struct iw_request_info
*info
,
142 struct iw_point
*data
, char *extra
);
143 extern int usbdrvwext_siwap(struct net_device
*dev
, struct iw_request_info
*info
,
144 struct sockaddr
*MacAddr
, char *extra
);
145 extern int usbdrvwext_giwap(struct net_device
*dev
, struct iw_request_info
*info
,
146 struct sockaddr
*MacAddr
, char *extra
);
147 extern int usbdrvwext_iwaplist(struct net_device
*dev
, struct iw_request_info
*info
,
148 struct iw_point
*data
, char *extra
);
149 extern int usbdrvwext_siwscan(struct net_device
*dev
, struct iw_request_info
*info
,
150 struct iw_point
*data
, char *extra
);
151 extern int usbdrvwext_giwscan(struct net_device
*dev
, struct iw_request_info
*info
,
152 struct iw_point
*data
, char *extra
);
153 extern int usbdrvwext_siwessid(struct net_device
*dev
, struct iw_request_info
*info
,
154 struct iw_point
*essid
, char *extra
);
155 extern int usbdrvwext_giwessid(struct net_device
*dev
, struct iw_request_info
*info
,
156 struct iw_point
*essid
, char *extra
);
157 extern int usbdrvwext_siwnickn(struct net_device
*dev
, struct iw_request_info
*info
,
158 struct iw_point
*data
, char *nickname
);
159 extern int usbdrvwext_giwnickn(struct net_device
*dev
, struct iw_request_info
*info
,
160 struct iw_point
*data
, char *nickname
);
161 extern int usbdrvwext_siwrate(struct net_device
*dev
, struct iw_request_info
*info
,
162 struct iw_param
*frq
, char *extra
);
163 extern int usbdrvwext_giwrate(struct net_device
*dev
, struct iw_request_info
*info
,
164 struct iw_param
*frq
, char *extra
);
165 extern int usbdrvwext_siwrts(struct net_device
*dev
, struct iw_request_info
*info
,
166 struct iw_param
*rts
, char *extra
);
167 extern int usbdrvwext_giwrts(struct net_device
*dev
, struct iw_request_info
*info
,
168 struct iw_param
*rts
, char *extra
);
169 extern int usbdrvwext_siwfrag(struct net_device
*dev
, struct iw_request_info
*info
,
170 struct iw_param
*frag
, char *extra
);
171 extern int usbdrvwext_giwfrag(struct net_device
*dev
, struct iw_request_info
*info
,
172 struct iw_param
*frag
, char *extra
);
173 extern int usbdrvwext_siwtxpow(struct net_device
*dev
, struct iw_request_info
*info
,
174 struct iw_param
*rrq
, char *extra
);
175 extern int usbdrvwext_giwtxpow(struct net_device
*dev
, struct iw_request_info
*info
,
176 struct iw_param
*rrq
, char *extra
);
177 extern int usbdrvwext_siwretry(struct net_device
*dev
, struct iw_request_info
*info
,
178 struct iw_param
*rrq
, char *extra
);
179 extern int usbdrvwext_giwretry(struct net_device
*dev
, struct iw_request_info
*info
,
180 struct iw_param
*rrq
, char *extra
);
181 extern int usbdrvwext_siwencode(struct net_device
*dev
, struct iw_request_info
*info
,
182 struct iw_point
*erq
, char *key
);
183 extern int usbdrvwext_giwencode(struct net_device
*dev
, struct iw_request_info
*info
,
184 struct iw_point
*erq
, char *key
);
185 extern int usbdrvwext_siwpower(struct net_device
*dev
, struct iw_request_info
*info
,
186 struct iw_param
*frq
, char *extra
);
187 extern int usbdrvwext_giwpower(struct net_device
*dev
, struct iw_request_info
*info
,
188 struct iw_param
*frq
, char *extra
);
189 extern int usbdrv_ioctl(struct net_device
*dev
, struct ifreq
*ifr
, int cmd
);
191 * Structures to export the Wireless Handlers
194 struct iw_priv_args usbdrv_private_args
[] = {
195 // { SIOCIWFIRSTPRIV + 0x0, 0, 0, "list_bss" },
196 // { SIOCIWFIRSTPRIV + 0x1, 0, 0, "card_reset" },
197 { SIOCIWFIRSTPRIV
+ 0x2, IW_PRIV_TYPE_INT
| IW_PRIV_SIZE_FIXED
| 1, 0, "set_auth" }, /* 0 - open, 1 - shared key */
198 { SIOCIWFIRSTPRIV
+ 0x3, 0, IW_PRIV_TYPE_CHAR
| 12, "get_auth" },
199 // { SIOCIWFIRSTPRIV + 0x4, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_preamble" }, /* 0 - long, 1 - short */
200 // { SIOCIWFIRSTPRIV + 0x5, 0, IW_PRIV_TYPE_CHAR | 6, "get_preamble" },
201 // { SIOCIWFIRSTPRIV + 0x6, 0, 0, "cnt" },
202 // { SIOCIWFIRSTPRIV + 0x7, 0, 0, "regs" },
203 // { SIOCIWFIRSTPRIV + 0x8, 0, 0, "probe" },
204 // { SIOCIWFIRSTPRIV + 0x9, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "dbg_flag" },
205 // { SIOCIWFIRSTPRIV + 0xA, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "connect" },
206 // { SIOCIWFIRSTPRIV + 0xB, IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "set_mac_mode" },
207 // { SIOCIWFIRSTPRIV + 0xC, 0, IW_PRIV_TYPE_CHAR | 12, "get_mac_mode" },
210 #if WIRELESS_EXT > 12
211 static iw_handler usbdrvwext_handler
[] = {
212 (iw_handler
) NULL
, /* SIOCSIWCOMMIT */
213 (iw_handler
) usbdrvwext_giwname
, /* SIOCGIWNAME */
214 (iw_handler
) NULL
, /* SIOCSIWNWID */
215 (iw_handler
) NULL
, /* SIOCGIWNWID */
216 (iw_handler
) usbdrvwext_siwfreq
, /* SIOCSIWFREQ */
217 (iw_handler
) usbdrvwext_giwfreq
, /* SIOCGIWFREQ */
218 (iw_handler
) usbdrvwext_siwmode
, /* SIOCSIWMODE */
219 (iw_handler
) usbdrvwext_giwmode
, /* SIOCGIWMODE */
220 (iw_handler
) usbdrvwext_siwsens
, /* SIOCSIWSENS */
221 (iw_handler
) usbdrvwext_giwsens
, /* SIOCGIWSENS */
222 (iw_handler
) NULL
, /* not used */ /* SIOCSIWRANGE */
223 (iw_handler
) usbdrvwext_giwrange
, /* SIOCGIWRANGE */
224 (iw_handler
) NULL
, /* not used */ /* SIOCSIWPRIV */
225 (iw_handler
) NULL
, /* kernel code */ /* SIOCGIWPRIV */
226 (iw_handler
) NULL
, /* not used */ /* SIOCSIWSTATS */
227 (iw_handler
) NULL
, /* kernel code */ /* SIOCGIWSTATS */
228 (iw_handler
) NULL
, /* SIOCSIWSPY */
229 (iw_handler
) NULL
, /* SIOCGIWSPY */
230 (iw_handler
) NULL
, /* -- hole -- */
231 (iw_handler
) NULL
, /* -- hole -- */
232 (iw_handler
) usbdrvwext_siwap
, /* SIOCSIWAP */
233 (iw_handler
) usbdrvwext_giwap
, /* SIOCGIWAP */
234 (iw_handler
) NULL
, /* -- hole -- */
235 (iw_handler
) usbdrvwext_iwaplist
, /* SIOCGIWAPLIST */
236 #if WIRELESS_EXT > 13
237 (iw_handler
) usbdrvwext_siwscan
, /* SIOCSIWSCAN */
238 (iw_handler
) usbdrvwext_giwscan
, /* SIOCGIWSCAN */
239 #else /* WIRELESS_EXT > 13 */
240 (iw_handler
) NULL
, /* null */ /* SIOCSIWSCAN */
241 (iw_handler
) NULL
, /* null */ /* SIOCGIWSCAN */
242 #endif /* WIRELESS_EXT > 13 */
243 (iw_handler
) usbdrvwext_siwessid
, /* SIOCSIWESSID */
244 (iw_handler
) usbdrvwext_giwessid
, /* SIOCGIWESSID */
246 (iw_handler
) usbdrvwext_siwnickn
, /* SIOCSIWNICKN */
247 (iw_handler
) usbdrvwext_giwnickn
, /* SIOCGIWNICKN */
248 (iw_handler
) NULL
, /* -- hole -- */
249 (iw_handler
) NULL
, /* -- hole -- */
250 (iw_handler
) usbdrvwext_siwrate
, /* SIOCSIWRATE */
251 (iw_handler
) usbdrvwext_giwrate
, /* SIOCGIWRATE */
252 (iw_handler
) usbdrvwext_siwrts
, /* SIOCSIWRTS */
253 (iw_handler
) usbdrvwext_giwrts
, /* SIOCGIWRTS */
254 (iw_handler
) usbdrvwext_siwfrag
, /* SIOCSIWFRAG */
255 (iw_handler
) usbdrvwext_giwfrag
, /* SIOCGIWFRAG */
256 (iw_handler
) usbdrvwext_siwtxpow
, /* SIOCSIWTXPOW */
257 (iw_handler
) usbdrvwext_giwtxpow
, /* SIOCGIWTXPOW */
258 (iw_handler
) usbdrvwext_siwretry
, /* SIOCSIWRETRY */
259 (iw_handler
) usbdrvwext_giwretry
, /* SIOCGIWRETRY */
260 (iw_handler
) usbdrvwext_siwencode
, /* SIOCSIWENCODE */
261 (iw_handler
) usbdrvwext_giwencode
, /* SIOCGIWENCODE */
262 (iw_handler
) usbdrvwext_siwpower
, /* SIOCSIWPOWER */
263 (iw_handler
) usbdrvwext_giwpower
, /* SIOCGIWPOWER */
266 static const iw_handler usbdrv_private_handler
[] =
268 //(iw_handler) usbdrvwext_setparam, /* SIOCWFIRSTPRIV+0 */
269 //(iw_handler) usbdrvwext_getparam, /* SIOCWFIRSTPRIV+1 */
270 //(iw_handler) usbdrvwext_setkey, /* SIOCWFIRSTPRIV+2 */
271 //(iw_handler) usbdrvwext_setwmmparams, /* SIOCWFIRSTPRIV+3 */
272 //(iw_handler) usbdrvwext_delkey, /* SIOCWFIRSTPRIV+4 */
273 //(iw_handler) usbdrvwext_getwmmparams, /* SIOCWFIRSTPRIV+5 */
274 //(iw_handler) usbdrvwext_setmlme, /* SIOCWFIRSTPRIV+6 */
275 //(iw_handler) usbdrvwext_getchaninfo, /* SIOCWFIRSTPRIV+7 */
276 //(iw_handler) usbdrvwext_setoptie, /* SIOCWFIRSTPRIV+8 */
277 //(iw_handler) usbdrvwext_getoptie, /* SIOCWFIRSTPRIV+9 */
278 //(iw_handler) usbdrvwext_addmac, /* SIOCWFIRSTPRIV+10 */
279 //(iw_handler) usbdrvwext_getscanresults, /* SIOCWFIRSTPRIV+11 */
280 //(iw_handler) usbdrvwext_delmac, /* SIOCWFIRSTPRIV+12 */
281 //(iw_handler) usbdrvwext_getchanlist, /* SIOCWFIRSTPRIV+13 */
282 //(iw_handler) usbdrvwext_setchanlist, /* SIOCWFIRSTPRIV+14 */
283 //(iw_handler) NULL, /* SIOCWFIRSTPRIV+15 */
284 //(iw_handler) usbdrvwext_chanswitch, /* SIOCWFIRSTPRIV+16 */
285 //(iw_handler) usbdrvwext_setmode, /* SIOCWFIRSTPRIV+17 */
286 //(iw_handler) usbdrvwext_getmode, /* SIOCWFIRSTPRIV+18 */
287 NULL
, /* SIOCIWFIRSTPRIV */
290 struct iw_handler_def p80211wext_handler_def
= {
291 .num_standard
= sizeof(usbdrvwext_handler
) / sizeof(iw_handler
),
292 .num_private
= sizeof(usbdrv_private_handler
)/sizeof(iw_handler
),
293 .num_private_args
= sizeof(usbdrv_private_args
)/sizeof(struct iw_priv_args
),
294 .standard
= usbdrvwext_handler
,
295 .private = (iw_handler
*) usbdrv_private_handler
,
296 .private_args
= (struct iw_priv_args
*) usbdrv_private_args
301 //struct zsWdsStruct wds[ZM_WDS_PORT_NUMBER];
302 //void zfInitWdsStruct(void);
305 struct zsVapStruct vap
[ZM_VAP_PORT_NUMBER
];
306 void zfLnxInitVapStruct(void);
310 * usbdrv_intr - interrupt handler
311 * @irq: the IRQ number
312 * @dev_inst: the net_device struct
313 * @regs: registers (unused)
315 * This routine is the ISR for the usbdrv board. It services
316 * the RX & TX queues & starts the RU if it has stopped due
319 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
320 irqreturn_t
usbdrv_intr(int irq
, void *dev_inst
, struct pt_regs
*regs
)
322 void usbdrv_intr(int irq
, void *dev_inst
, struct pt_regs
*regs
)
325 struct net_device
*dev
;
326 struct usbdrv_private
*macp
;
332 /* Read register error, card may be unpluged */
333 if (0)//(intr_status == -1)
334 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
340 /* the device is closed, don't continue or else bad things may happen. */
341 if (!netif_running(dev
)) {
342 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
349 if (macp
->driver_isolated
) {
350 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
357 #if (WLAN_HOSTIF == WLAN_PCI)
361 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
368 int usbdrv_open(struct net_device
*dev
)
370 struct usbdrv_private
*macp
= dev
->ml_priv
;
374 //unsigned char addr[6];
375 struct zsCbFuncTbl cbFuncTbl
;
377 printk("Enter open()\n");
380 // read_lock(&(macp->isolate_lock));
382 if (macp
->driver_isolated
) {
387 size
= zfiGlobalDataSize(dev
);
388 if ((mem
= kmalloc(size
, GFP_KERNEL
)) == NULL
)
395 memset(&cbFuncTbl
, 0, sizeof(struct zsCbFuncTbl
));
396 cbFuncTbl
.zfcbAuthNotify
= zfLnxAuthNotify
;
397 cbFuncTbl
.zfcbAuthNotify
= zfLnxAuthNotify
;
398 cbFuncTbl
.zfcbAsocNotify
= zfLnxAsocNotify
;
399 cbFuncTbl
.zfcbDisAsocNotify
= zfLnxDisAsocNotify
;
400 cbFuncTbl
.zfcbApConnectNotify
= zfLnxApConnectNotify
;
401 cbFuncTbl
.zfcbConnectNotify
= zfLnxConnectNotify
;
402 cbFuncTbl
.zfcbScanNotify
= zfLnxScanNotify
;
403 cbFuncTbl
.zfcbMicFailureNotify
= zfLnxMicFailureNotify
;
404 cbFuncTbl
.zfcbApMicFailureNotify
= zfLnxApMicFailureNotify
;
405 cbFuncTbl
.zfcbIbssPartnerNotify
= zfLnxIbssPartnerNotify
;
406 cbFuncTbl
.zfcbMacAddressNotify
= zfLnxMacAddressNotify
;
407 cbFuncTbl
.zfcbSendCompleteIndication
= zfLnxSendCompleteIndication
;
408 cbFuncTbl
.zfcbRecvEth
= zfLnxRecvEth
;
409 cbFuncTbl
.zfcbRecv80211
= zfLnxRecv80211
;
410 cbFuncTbl
.zfcbRestoreBufData
= zfLnxRestoreBufData
;
411 #ifdef ZM_ENABLE_CENC
412 cbFuncTbl
.zfcbCencAsocNotify
= zfLnxCencAsocNotify
;
413 #endif //ZM_ENABLE_CENC
414 cbFuncTbl
.zfcbHwWatchDogNotify
= zfLnxWatchDogNotify
;
415 zfiWlanOpen(dev
, &cbFuncTbl
);
419 //u16_t mac[3] = {0x1300, 0xb6d4, 0x5aaf};
420 u16_t mac
[3] = {0x8000, 0x00ab, 0x0000};
421 //zfiWlanSetMacAddress(dev, mac);
424 zfiWlanQueryMacAddress(dev
, addr
);
425 dev
->dev_addr
[0] = addr
[0];
426 dev
->dev_addr
[1] = addr
[1];
427 dev
->dev_addr
[2] = addr
[2];
428 dev
->dev_addr
[3] = addr
[3];
429 dev
->dev_addr
[4] = addr
[4];
430 dev
->dev_addr
[5] = addr
[5];
432 //zfwMacAddressNotify() will be called to setup dev->dev_addr[]
434 zfLnxCreateThread(dev
);
436 mod_timer(&(macp
->hbTimer10ms
), jiffies
+ (1*HZ
)/100); //10 ms
438 netif_carrier_on(dev
);
440 netif_start_queue(dev
);
443 zfiWlanSetWlanMode(dev
, ZM_MODE_AP
);
444 zfiWlanSetBasicRate(dev
, 0xf, 0, 0);
445 zfiWlanSetSSID(dev
, "OTUS_CWY", 8);
446 zfiWlanSetDtimCount(dev
, 3);
450 u8_t key
[16] = {0x12, 0x34, 0x56, 0x78, 0x90};
451 struct zsKeyInfo keyInfo
;
453 keyInfo
.keyLength
= 5;
454 keyInfo
.keyIndex
= 0;
457 zfiWlanSetKey(dev
, keyInfo
);
459 zfiWlanSetEncryMode(dev
, ZM_WEP64
);
462 #if ZM_SHARE_AUTH == 1
463 zfiWlanSetAuthenticationMode(dev
, 1);
464 #endif //#if ZM_SHARE_AUTH == 1
465 #endif //#if ZM_WEP_MOME == 1
467 #elif ZM_PIBSS_MODE == 1
468 zfiWlanSetWlanMode(dev
, ZM_MODE_PSEUDO
);
470 zfiWlanSetWlanMode(dev
, ZM_MODE_INFRASTRUCTURE
);
472 //zfiWlanSetChannel(dev, ZM_CHANNEL, FALSE);
473 zfiWlanSetFrequency(dev
, 2462000, FALSE
);
474 zfiWlanSetRtsThreshold(dev
, 32767);
475 zfiWlanSetFragThreshold(dev
, 0);
479 #ifdef ZM_ENABLE_CENC
480 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,14)
481 macp
->netlink_sk
= netlink_kernel_create(NETLINK_USERSOCK
, NULL
);
483 macp
->netlink_sk
= netlink_kernel_create(NETLINK_USERSOCK
, 1, NULL
, THIS_MODULE
);
486 if (macp
->netlink_sk
== NULL
)
488 printk(KERN_ERR
"Can't create NETLINK socket\n");
492 macp
->DeviceOpened
= 1;
495 // read_unlock(&(macp->isolate_lock));
497 //zfRegisterWdsDev(dev, 0);
498 //zfLnxRegisterVapDev(dev, 0);
507 * usbdrv_get_stats - get driver statistics
508 * @dev: adapter's net_device struct
510 * This routine is called when the OS wants the adapter's stats returned.
511 * It returns the address of the net_device_stats stucture for the device.
512 * If the statistics are currently being updated, then they might be incorrect
513 * for a short while. However, since this cannot actually cause damage, no
517 struct net_device_stats
* usbdrv_get_stats(struct net_device
*dev
)
519 struct usbdrv_private
*macp
= dev
->ml_priv
;
521 macp
->drv_stats
.net_stats
.tx_errors
=
522 macp
->drv_stats
.net_stats
.tx_carrier_errors
+
523 macp
->drv_stats
.net_stats
.tx_aborted_errors
;
525 macp
->drv_stats
.net_stats
.rx_errors
=
526 macp
->drv_stats
.net_stats
.rx_crc_errors
+
527 macp
->drv_stats
.net_stats
.rx_frame_errors
+
528 macp
->drv_stats
.net_stats
.rx_length_errors
;
531 return &(macp
->drv_stats
.net_stats
);
536 * usbdrv_set_mac - set the MAC address
537 * @dev: adapter's net_device struct
538 * @addr: the new address
540 * This routine sets the ethernet address of the board
546 int usbdrv_set_mac(struct net_device
*dev
, void *addr
)
548 struct usbdrv_private
*macp
;
552 read_lock(&(macp
->isolate_lock
));
554 if (macp
->driver_isolated
) {
562 read_unlock(&(macp
->isolate_lock
));
569 usbdrv_isolate_driver(struct usbdrv_private
*macp
)
572 write_lock_irq(&(macp
->isolate_lock
));
574 macp
->driver_isolated
= TRUE
;
576 write_unlock_irq(&(macp
->isolate_lock
));
579 if (netif_running(macp
->device
))
581 netif_carrier_off(macp
->device
);
582 netif_stop_queue(macp
->device
);
587 int usbdrv_change_mtu(struct net_device
*dev
, int new_mtu
)
589 if ((new_mtu
< 68) || (new_mtu
> (ETH_DATA_LEN
+ VLAN_SIZE
)))
596 void zfLnxUnlinkAllUrbs(struct usbdrv_private
*macp
);
598 int usbdrv_close(struct net_device
*dev
)
600 extern void zfHpLedCtrl(struct net_device
*dev
, u16_t ledId
, u8_t mode
);
602 struct usbdrv_private
*macp
= dev
->ml_priv
;
604 printk(KERN_DEBUG
"usbdrv_close\n");
606 netif_carrier_off(macp
->device
);
608 del_timer_sync(&macp
->hbTimer10ms
);
610 printk(KERN_DEBUG
"usbdrv_netif_carrier_off\n");
612 usbdrv_isolate_driver(macp
);
614 printk(KERN_DEBUG
"usbdrv_isolate_driver\n");
616 netif_carrier_off(macp
->device
);
617 #ifdef ZM_ENABLE_CENC
619 if (macp
->netlink_sk
!= NULL
)
621 // sock_release(macp->netlink_sk);
622 printk(KERN_ERR
"usbdrv close netlink socket\n");
624 #endif //ZM_ENABLE_CENC
625 #if (WLAN_HOSTIF == WLAN_PCI)
626 //free_irq(dev->irq, dev);
630 zfHpLedCtrl(dev
, 0, 0);
631 zfHpLedCtrl(dev
, 1, 0);
633 /* Delay for a while */
636 /* clear WPA/RSN IE */
639 /* set the isolate flag to false, so usbdrv_open can be called */
640 macp
->driver_isolated
= FALSE
;
645 zfLnxUnlinkAllUrbs(macp
);
653 int usbdrv_xmit_frame(struct sk_buff
*skb
, struct net_device
*dev
)
655 int notify_stop
= FALSE
;
656 struct usbdrv_private
*macp
= dev
->ml_priv
;
663 s
= skb_copy_expand(skb
, 8, 0, GFP_ATOMIC
);
670 printk("len1=%d, len2=%d", skb
->len
, s
->len
);
671 netlink_broadcast(rtnl
, s
, 0, RTMGRP_LINK
, GFP_ATOMIC
);
676 dev_kfree_skb_irq(skb
);
678 zfiTxSendEth(dev
, skb
, 0);
680 macp
->drv_stats
.net_stats
.tx_bytes
+= skb
->len
;
681 macp
->drv_stats
.net_stats
.tx_packets
++;
683 //dev_kfree_skb_irq(skb);
686 netif_carrier_off(dev
);
687 netif_stop_queue(dev
);
696 void usbdrv_set_multi(struct net_device
*dev
)
700 if (!(dev
->flags
& IFF_UP
))
710 * usbdrv_clear_structs - free resources
712 * @dev: adapter's net_device struct
714 * Free all device specific structs, unmap i/o address, etc.
716 void usbdrv_clear_structs(struct net_device
*dev
)
718 struct usbdrv_private
*macp
= dev
->ml_priv
;
721 #if (WLAN_HOSTIF == WLAN_PCI)
724 pci_release_regions(macp
->pdev
);
725 pci_disable_device(macp
->pdev
);
726 pci_set_drvdata(macp
->pdev
, NULL
);
735 void usbdrv_remove1(struct pci_dev
*pcid
)
737 struct net_device
*dev
;
738 struct usbdrv_private
*macp
;
740 if (!(dev
= (struct net_device
*) pci_get_drvdata(pcid
)))
744 unregister_netdev(dev
);
746 usbdrv_clear_structs(dev
);
750 void zfLnx10msTimer(struct net_device
* dev
)
752 struct usbdrv_private
*macp
= dev
->ml_priv
;
754 mod_timer(&(macp
->hbTimer10ms
), jiffies
+ (1*HZ
)/100); //10 ms
759 void zfLnxInitVapStruct(void)
763 for (i
=0; i
<ZM_VAP_PORT_NUMBER
; i
++)
770 int zfLnxVapOpen(struct net_device
*dev
)
774 vapId
= zfLnxGetVapId(dev
);
776 if (vap
[vapId
].openFlag
== 0)
778 vap
[vapId
].openFlag
= 1;
779 printk("zfLnxVapOpen : device name=%s, vap ID=%d\n", dev
->name
, vapId
);
780 zfiWlanSetSSID(dev
, "vap1", 4);
782 netif_start_queue(dev
);
786 printk("VAP opened error : vap ID=%d\n", vapId
);
791 int zfLnxVapClose(struct net_device
*dev
)
795 vapId
= zfLnxGetVapId(dev
);
799 if (vap
[vapId
].openFlag
== 1)
801 printk("zfLnxVapClose: device name=%s, vap ID=%d\n", dev
->name
, vapId
);
803 netif_stop_queue(dev
);
804 vap
[vapId
].openFlag
= 0;
808 printk("VAP port was not opened : vap ID=%d\n", vapId
);
814 int zfLnxVapXmitFrame(struct sk_buff
*skb
, struct net_device
*dev
)
816 int notify_stop
= FALSE
;
817 struct usbdrv_private
*macp
= dev
->ml_priv
;
820 vapId
= zfLnxGetVapId(dev
);
821 //printk("zfLnxVapXmitFrame: vap ID=%d\n", vapId);
822 //printk("zfLnxVapXmitFrame(), skb=%lxh\n", (u32_t)skb);
824 if (vapId
>= ZM_VAP_PORT_NUMBER
)
826 dev_kfree_skb_irq(skb
);
830 if (vap
[vapId
].openFlag
== 0)
832 dev_kfree_skb_irq(skb
);
838 zfiTxSendEth(dev
, skb
, 0x1);
840 macp
->drv_stats
.net_stats
.tx_bytes
+= skb
->len
;
841 macp
->drv_stats
.net_stats
.tx_packets
++;
843 //dev_kfree_skb_irq(skb);
846 netif_carrier_off(dev
);
847 netif_stop_queue(dev
);
853 int zfLnxRegisterVapDev(struct net_device
* parentDev
, u16_t vapId
)
855 /* Allocate net device structure */
856 vap
[vapId
].dev
= alloc_etherdev(0);
857 printk("Register vap dev=%x\n", (u32_t
)vap
[vapId
].dev
);
859 if(vap
[vapId
].dev
== NULL
) {
860 printk("alloc_etherdev fail\n");
864 /* Setup the default settings */
865 ether_setup(vap
[vapId
].dev
);
868 memcpy(vap
[vapId
].dev
->dev_addr
, parentDev
->dev_addr
, ETH_ALEN
);
870 vap
[vapId
].dev
->irq
= parentDev
->irq
;
871 vap
[vapId
].dev
->base_addr
= parentDev
->base_addr
;
872 vap
[vapId
].dev
->mem_start
= parentDev
->mem_start
;
873 vap
[vapId
].dev
->mem_end
= parentDev
->mem_end
;
874 vap
[vapId
].dev
->ml_priv
= parentDev
->ml_priv
;
876 //dev->hard_start_xmit = &zd1212_wds_xmit_frame;
877 vap
[vapId
].dev
->hard_start_xmit
= &zfLnxVapXmitFrame
;
878 vap
[vapId
].dev
->open
= &zfLnxVapOpen
;
879 vap
[vapId
].dev
->stop
= &zfLnxVapClose
;
880 vap
[vapId
].dev
->get_stats
= &usbdrv_get_stats
;
881 vap
[vapId
].dev
->change_mtu
= &usbdrv_change_mtu
;
882 #ifdef ZM_HOSTAPD_SUPPORT
883 vap
[vapId
].dev
->do_ioctl
= usbdrv_ioctl
;
885 vap
[vapId
].dev
->do_ioctl
= NULL
;
887 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
888 vap
[vapId
].dev
->destructor
= free_netdev
;
890 vap
[vapId
].dev
->features
|= NETIF_F_DYNALLOC
;
893 vap
[vapId
].dev
->tx_queue_len
= 0;
895 vap
[vapId
].dev
->dev_addr
[0] = parentDev
->dev_addr
[0];
896 vap
[vapId
].dev
->dev_addr
[1] = parentDev
->dev_addr
[1];
897 vap
[vapId
].dev
->dev_addr
[2] = parentDev
->dev_addr
[2];
898 vap
[vapId
].dev
->dev_addr
[3] = parentDev
->dev_addr
[3];
899 vap
[vapId
].dev
->dev_addr
[4] = parentDev
->dev_addr
[4];
900 vap
[vapId
].dev
->dev_addr
[5] = parentDev
->dev_addr
[5] + (vapId
+1);
902 /* Stop the network queue first */
903 netif_stop_queue(vap
[vapId
].dev
);
905 sprintf(vap
[vapId
].dev
->name
, "vap%d", vapId
);
906 printk("Register VAP dev success : %s\n", vap
[vapId
].dev
->name
);
908 if(register_netdevice(vap
[vapId
].dev
) != 0) {
909 printk("register VAP device fail\n");
910 vap
[vapId
].dev
= NULL
;
917 int zfLnxUnregisterVapDev(struct net_device
* parentDev
, u16_t vapId
)
921 printk("Unregister VAP dev : %s\n", vap
[vapId
].dev
->name
);
923 if(vap
[vapId
].dev
!= NULL
) {
924 printk("Unregister vap dev=%x\n", (u32_t
)vap
[vapId
].dev
);
926 //unregister_netdevice(wds[wdsId].dev);
927 unregister_netdev(vap
[vapId
].dev
);
929 printk("VAP unregister_netdevice\n");
930 vap
[vapId
].dev
= NULL
;
933 printk("unregister VAP device: %d fail\n", vapId
);
942 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) /* tune me! */
943 # define SUBMIT_URB(u,f) usb_submit_urb(u,f)
944 # define USB_ALLOC_URB(u,f) usb_alloc_urb(u,f)
946 # define SUBMIT_URB(u,f) usb_submit_urb(u)
947 # define USB_ALLOC_URB(u,f) usb_alloc_urb(u)
950 //extern void zfiWlanQueryMacAddress(zdev_t* dev, u8_t* addr);
951 extern struct iw_handler_def p80211wext_handler_def
;
953 extern int usbdrv_open(struct net_device
*dev
);
954 extern int usbdrv_close(struct net_device
*dev
);
955 extern int usbdrv_xmit_frame(struct sk_buff
*skb
, struct net_device
*dev
);
956 extern int usbdrv_xmit_frame(struct sk_buff
*skb
, struct net_device
*dev
);
957 extern int usbdrv_change_mtu(struct net_device
*dev
, int new_mtu
);
958 extern void usbdrv_set_multi(struct net_device
*dev
);
959 extern int usbdrv_set_mac(struct net_device
*dev
, void *addr
);
960 extern struct net_device_stats
* usbdrv_get_stats(struct net_device
*dev
);
961 extern int usbdrv_ioctl(struct net_device
*dev
, struct ifreq
*ifr
, int cmd
);
962 extern UsbTxQ_t
*zfLnxGetUsbTxBuffer(struct net_device
*dev
);
964 int zfLnxAllocAllUrbs(struct usbdrv_private
*macp
)
966 struct usb_interface
*interface
= macp
->interface
;
967 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
968 struct usb_interface_descriptor
*iface_desc
= &interface
->altsetting
[0];
970 struct usb_host_interface
*iface_desc
= &interface
->altsetting
[0];
973 struct usb_endpoint_descriptor
*endpoint
;
976 /* descriptor matches, let's find the endpoints needed */
977 /* check out the endpoints */
978 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
979 for (i
= 0; i
< iface_desc
->bNumEndpoints
; ++i
)
981 endpoint
= &iface_desc
->endpoint
[i
];
983 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
)
985 endpoint
= &iface_desc
->endpoint
[i
].desc
;
987 if ((endpoint
->bEndpointAddress
& 0x80) &&
988 ((endpoint
->bmAttributes
& 3) == 0x02))
990 /* we found a bulk in endpoint */
991 printk(KERN_ERR
"bulk in: wMaxPacketSize = %x\n", le16_to_cpu(endpoint
->wMaxPacketSize
));
994 if (((endpoint
->bEndpointAddress
& 0x80) == 0x00) &&
995 ((endpoint
->bmAttributes
& 3) == 0x02))
997 /* we found a bulk out endpoint */
998 printk(KERN_ERR
"bulk out: wMaxPacketSize = %x\n", le16_to_cpu(endpoint
->wMaxPacketSize
));
1001 if ((endpoint
->bEndpointAddress
& 0x80) &&
1002 ((endpoint
->bmAttributes
& 3) == 0x03))
1004 /* we found a interrupt in endpoint */
1005 printk(KERN_ERR
"interrupt in: wMaxPacketSize = %x\n", le16_to_cpu(endpoint
->wMaxPacketSize
));
1006 printk(KERN_ERR
"interrupt in: int_interval = %d\n", endpoint
->bInterval
);
1009 if (((endpoint
->bEndpointAddress
& 0x80) == 0x00) &&
1010 ((endpoint
->bmAttributes
& 3) == 0x03))
1012 /* we found a interrupt out endpoint */
1013 printk(KERN_ERR
"interrupt out: wMaxPacketSize = %x\n", le16_to_cpu(endpoint
->wMaxPacketSize
));
1014 printk(KERN_ERR
"interrupt out: int_interval = %d\n", endpoint
->bInterval
);
1018 /* Allocate all Tx URBs */
1019 for (i
= 0; i
< ZM_MAX_TX_URB_NUM
; i
++)
1021 macp
->WlanTxDataUrb
[i
] = USB_ALLOC_URB(0, GFP_KERNEL
);
1023 if (macp
->WlanTxDataUrb
[i
] == 0)
1028 for (j
= 0; j
< i
; j
++)
1030 usb_free_urb(macp
->WlanTxDataUrb
[j
]);
1037 /* Allocate all Rx URBs */
1038 for (i
= 0; i
< ZM_MAX_RX_URB_NUM
; i
++)
1040 macp
->WlanRxDataUrb
[i
] = USB_ALLOC_URB(0, GFP_KERNEL
);
1042 if (macp
->WlanRxDataUrb
[i
] == 0)
1047 for (j
= 0; j
< i
; j
++)
1049 usb_free_urb(macp
->WlanRxDataUrb
[j
]);
1052 for (j
= 0; j
< ZM_MAX_TX_URB_NUM
; j
++)
1054 usb_free_urb(macp
->WlanTxDataUrb
[j
]);
1061 /* Allocate Register Read/Write USB */
1062 macp
->RegOutUrb
= USB_ALLOC_URB(0, GFP_KERNEL
);
1063 macp
->RegInUrb
= USB_ALLOC_URB(0, GFP_KERNEL
);
1068 void zfLnxFreeAllUrbs(struct usbdrv_private
*macp
)
1072 /* Free all Tx URBs */
1073 for (i
= 0; i
< ZM_MAX_TX_URB_NUM
; i
++)
1075 if (macp
->WlanTxDataUrb
[i
] != NULL
)
1077 usb_free_urb(macp
->WlanTxDataUrb
[i
]);
1081 /* Free all Rx URBs */
1082 for (i
= 0; i
< ZM_MAX_RX_URB_NUM
; i
++)
1084 if (macp
->WlanRxDataUrb
[i
] != NULL
)
1086 usb_free_urb(macp
->WlanRxDataUrb
[i
]);
1090 /* Free USB Register Read/Write URB */
1091 usb_free_urb(macp
->RegOutUrb
);
1092 usb_free_urb(macp
->RegInUrb
);
1095 void zfLnxUnlinkAllUrbs(struct usbdrv_private
*macp
)
1099 /* Unlink all Tx URBs */
1100 for (i
= 0; i
< ZM_MAX_TX_URB_NUM
; i
++)
1102 if (macp
->WlanTxDataUrb
[i
] != NULL
)
1104 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
1105 macp
->WlanTxDataUrb
[i
]->transfer_flags
&= ~URB_ASYNC_UNLINK
;
1107 usb_unlink_urb(macp
->WlanTxDataUrb
[i
]);
1111 /* Unlink all Rx URBs */
1112 for (i
= 0; i
< ZM_MAX_RX_URB_NUM
; i
++)
1114 if (macp
->WlanRxDataUrb
[i
] != NULL
)
1116 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
1117 macp
->WlanRxDataUrb
[i
]->transfer_flags
&= ~URB_ASYNC_UNLINK
;
1119 usb_unlink_urb(macp
->WlanRxDataUrb
[i
]);
1123 /* Unlink USB Register Read/Write URB */
1124 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
1125 macp
->RegOutUrb
->transfer_flags
&= ~URB_ASYNC_UNLINK
;
1127 usb_unlink_urb(macp
->RegOutUrb
);
1129 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,15)
1130 macp
->RegInUrb
->transfer_flags
&= ~URB_ASYNC_UNLINK
;
1132 usb_unlink_urb(macp
->RegInUrb
);
1135 u8_t
zfLnxInitSetup(struct net_device
*dev
, struct usbdrv_private
*macp
)
1137 //unsigned char addr[6];
1139 //init_MUTEX(&macp->ps_sem);
1140 //init_MUTEX(&macp->reg_sem);
1141 //init_MUTEX(&macp->bcn_sem);
1142 //init_MUTEX(&macp->config_sem);
1144 spin_lock_init(&(macp
->cs_lock
));
1147 zfiWlanQueryMacAddress(dev
, addr
);
1148 dev
->dev_addr
[0] = addr
[0];
1149 dev
->dev_addr
[1] = addr
[1];
1150 dev
->dev_addr
[2] = addr
[2];
1151 dev
->dev_addr
[3] = addr
[3];
1152 dev
->dev_addr
[4] = addr
[4];
1153 dev
->dev_addr
[5] = addr
[5];
1155 #if WIRELESS_EXT > 12
1156 dev
->wireless_handlers
= (struct iw_handler_def
*)&p80211wext_handler_def
;
1159 dev
->open
= usbdrv_open
;
1160 dev
->hard_start_xmit
= usbdrv_xmit_frame
;
1161 dev
->stop
= usbdrv_close
;
1162 dev
->change_mtu
= &usbdrv_change_mtu
;
1163 dev
->get_stats
= usbdrv_get_stats
;
1164 dev
->set_multicast_list
= usbdrv_set_multi
;
1165 dev
->set_mac_address
= usbdrv_set_mac
;
1166 dev
->do_ioctl
= usbdrv_ioctl
;
1168 dev
->flags
|= IFF_MULTICAST
;
1170 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24))
1171 dev
->dev_addr
[0] = 0x00;
1172 dev
->dev_addr
[1] = 0x03;
1173 dev
->dev_addr
[2] = 0x7f;
1174 dev
->dev_addr
[3] = 0x11;
1175 dev
->dev_addr
[4] = 0x22;
1176 dev
->dev_addr
[5] = 0x33;
1179 /* Initialize Heart Beat timer */
1180 init_timer(&macp
->hbTimer10ms
);
1181 macp
->hbTimer10ms
.data
= (unsigned long)dev
;
1182 macp
->hbTimer10ms
.function
= (void *)&zfLnx10msTimer
;
1184 /* Initialize WDS and VAP data structure */
1185 //zfInitWdsStruct();
1186 zfLnxInitVapStruct();
1191 u8_t
zfLnxClearStructs(struct net_device
*dev
)
1196 TxQCnt
= zfLnxCheckTxBufferCnt(dev
);
1198 printk(KERN_ERR
"TxQCnt: %d\n", TxQCnt
);
1200 for(ii
= 0; ii
< TxQCnt
; ii
++)
1202 UsbTxQ_t
*TxQ
= zfLnxGetUsbTxBuffer(dev
);
1204 printk(KERN_ERR
"dev_kfree_skb_any\n");
1206 dev_kfree_skb_any(TxQ
->buf
);