aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/staging/otus/wwrap.c968
1 files changed, 446 insertions, 522 deletions
diff --git a/drivers/staging/otus/wwrap.c b/drivers/staging/otus/wwrap.c
index b02eb42cd796..fcd3da07155b 100644
--- a/drivers/staging/otus/wwrap.c
+++ b/drivers/staging/otus/wwrap.c
@@ -29,24 +29,24 @@
29#include <linux/slab.h> 29#include <linux/slab.h>
30#include <net/iw_handler.h> 30#include <net/iw_handler.h>
31 31
32extern void zfiRecv80211(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo); 32extern void zfiRecv80211(zdev_t *dev, zbuf_t *buf, struct zsAdditionInfo *addInfo);
33extern void zfCoreRecv(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo); 33extern void zfCoreRecv(zdev_t *dev, zbuf_t *buf, struct zsAdditionInfo *addInfo);
34extern void zfIdlChkRsp(zdev_t* dev, u32_t* rsp, u16_t rspLen); 34extern void zfIdlChkRsp(zdev_t *dev, u32_t *rsp, u16_t rspLen);
35extern void zfIdlRsp(zdev_t* dev, u32_t *rsp, u16_t rspLen); 35extern void zfIdlRsp(zdev_t *dev, u32_t *rsp, u16_t rspLen);
36 36
37 37
38 38
39//extern struct zsWdsStruct wds[ZM_WDS_PORT_NUMBER]; 39/*extern struct zsWdsStruct wds[ZM_WDS_PORT_NUMBER];*/
40extern struct zsVapStruct vap[ZM_VAP_PORT_NUMBER]; 40extern struct zsVapStruct vap[ZM_VAP_PORT_NUMBER];
41 41
42u32_t zfLnxUsbSubmitTxData(zdev_t* dev); 42u32_t zfLnxUsbSubmitTxData(zdev_t *dev);
43u32_t zfLnxUsbIn(zdev_t* dev, urb_t *urb, zbuf_t *buf); 43u32_t zfLnxUsbIn(zdev_t *dev, urb_t *urb, zbuf_t *buf);
44u32_t zfLnxSubmitRegInUrb(zdev_t *dev); 44u32_t zfLnxSubmitRegInUrb(zdev_t *dev);
45u32_t zfLnxUsbSubmitBulkUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, 45u32_t zfLnxUsbSubmitBulkUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction,
46 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context); 46 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context);
47u32_t zfLnxUsbSubmitIntUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, 47u32_t zfLnxUsbSubmitIntUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction,
48 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context, 48 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context,
49 u32_t interval); 49 u32_t interval);
50 50
51u16_t zfLnxGetFreeTxUrb(zdev_t *dev) 51u16_t zfLnxGetFreeTxUrb(zdev_t *dev)
52{ 52{
@@ -56,22 +56,19 @@ u16_t zfLnxGetFreeTxUrb(zdev_t *dev)
56 56
57 spin_lock_irqsave(&macp->cs_lock, irqFlag); 57 spin_lock_irqsave(&macp->cs_lock, irqFlag);
58 58
59 //idx = ((macp->TxUrbTail + 1) & (ZM_MAX_TX_URB_NUM - 1)); 59 /*idx = ((macp->TxUrbTail + 1) & (ZM_MAX_TX_URB_NUM - 1));*/
60 60
61 //if (idx != macp->TxUrbHead) 61 /*if (idx != macp->TxUrbHead)*/
62 if (macp->TxUrbCnt != 0) 62 if (macp->TxUrbCnt != 0) {
63 { 63 idx = macp->TxUrbTail;
64 idx = macp->TxUrbTail; 64 macp->TxUrbTail = ((macp->TxUrbTail + 1) & (ZM_MAX_TX_URB_NUM - 1));
65 macp->TxUrbTail = ((macp->TxUrbTail + 1) & (ZM_MAX_TX_URB_NUM - 1)); 65 macp->TxUrbCnt--;
66 macp->TxUrbCnt--; 66 } else {
67 } 67 /*printk(KERN_ERR "macp->TxUrbCnt: %d\n", macp->TxUrbCnt);*/
68 else 68 idx = 0xffff;
69 { 69 }
70 //printk(KERN_ERR "macp->TxUrbCnt: %d\n", macp->TxUrbCnt);
71 idx = 0xffff;
72 }
73 70
74 spin_unlock_irqrestore(&macp->cs_lock, irqFlag); 71 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
75 return idx; 72 return idx;
76} 73}
77 74
@@ -85,16 +82,13 @@ void zfLnxPutTxUrb(zdev_t *dev)
85 82
86 idx = ((macp->TxUrbHead + 1) & (ZM_MAX_TX_URB_NUM - 1)); 83 idx = ((macp->TxUrbHead + 1) & (ZM_MAX_TX_URB_NUM - 1));
87 84
88 //if (idx != macp->TxUrbTail) 85 /*if (idx != macp->TxUrbTail)*/
89 if (macp->TxUrbCnt < ZM_MAX_TX_URB_NUM) 86 if (macp->TxUrbCnt < ZM_MAX_TX_URB_NUM) {
90 { 87 macp->TxUrbHead = idx;
91 macp->TxUrbHead = idx; 88 macp->TxUrbCnt++;
92 macp->TxUrbCnt++; 89 } else {
93 } 90 printk("UsbTxUrbQ inconsistent: TxUrbHead: %d, TxUrbTail: %d\n",
94 else 91 macp->TxUrbHead, macp->TxUrbTail);
95 {
96 printk("UsbTxUrbQ inconsistent: TxUrbHead: %d, TxUrbTail: %d\n",
97 macp->TxUrbHead, macp->TxUrbTail);
98 } 92 }
99 93
100 spin_unlock_irqrestore(&macp->cs_lock, irqFlag); 94 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
@@ -125,24 +119,20 @@ UsbTxQ_t *zfLnxGetUsbTxBuffer(zdev_t *dev)
125 119
126 idx = ((macp->TxBufHead+1) & (ZM_MAX_TX_BUF_NUM - 1)); 120 idx = ((macp->TxBufHead+1) & (ZM_MAX_TX_BUF_NUM - 1));
127 121
128 //if (idx != macp->TxBufTail) 122 /*if (idx != macp->TxBufTail)*/
129 if (macp->TxBufCnt > 0) 123 if (macp->TxBufCnt > 0) {
130 { 124 /*printk("CWY - zfwGetUsbTxBuffer ,macp->TxBufCnt = %d\n", macp->TxBufCnt);*/
131 //printk("CWY - zfwGetUsbTxBuffer ,macp->TxBufCnt = %d\n", macp->TxBufCnt); 125 TxQ = (UsbTxQ_t *)&(macp->UsbTxBufQ[macp->TxBufHead]);
132 TxQ = (UsbTxQ_t *)&(macp->UsbTxBufQ[macp->TxBufHead]); 126 macp->TxBufHead = ((macp->TxBufHead+1) & (ZM_MAX_TX_BUF_NUM - 1));
133 macp->TxBufHead = ((macp->TxBufHead+1) & (ZM_MAX_TX_BUF_NUM - 1)); 127 macp->TxBufCnt--;
134 macp->TxBufCnt--; 128 } else {
135 } 129 if (macp->TxBufHead != macp->TxBufTail) {
136 else 130 printk(KERN_ERR "zfwGetUsbTxBuf UsbTxBufQ inconsistent: TxBufHead: %d, TxBufTail: %d\n",
137 { 131 macp->TxBufHead, macp->TxBufTail);
138 if (macp->TxBufHead != macp->TxBufTail) 132 }
139 { 133
140 printk(KERN_ERR "zfwGetUsbTxBuf UsbTxBufQ inconsistent: TxBufHead: %d, TxBufTail: %d\n", 134 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
141 macp->TxBufHead, macp->TxBufTail); 135 return NULL;
142 }
143
144 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
145 return NULL;
146 } 136 }
147 137
148 spin_unlock_irqrestore(&macp->cs_lock, irqFlag); 138 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
@@ -150,8 +140,8 @@ UsbTxQ_t *zfLnxGetUsbTxBuffer(zdev_t *dev)
150} 140}
151 141
152u16_t zfLnxPutUsbTxBuffer(zdev_t *dev, u8_t *hdr, u16_t hdrlen, 142u16_t zfLnxPutUsbTxBuffer(zdev_t *dev, u8_t *hdr, u16_t hdrlen,
153 u8_t *snap, u16_t snapLen, u8_t *tail, u16_t tailLen, 143 u8_t *snap, u16_t snapLen, u8_t *tail, u16_t tailLen,
154 zbuf_t *buf, u16_t offset) 144 zbuf_t *buf, u16_t offset)
155{ 145{
156 struct usbdrv_private *macp = dev->ml_priv; 146 struct usbdrv_private *macp = dev->ml_priv;
157 u16_t idx; 147 u16_t idx;
@@ -163,32 +153,29 @@ u16_t zfLnxPutUsbTxBuffer(zdev_t *dev, u8_t *hdr, u16_t hdrlen,
163 idx = ((macp->TxBufTail+1) & (ZM_MAX_TX_BUF_NUM - 1)); 153 idx = ((macp->TxBufTail+1) & (ZM_MAX_TX_BUF_NUM - 1));
164 154
165 /* For Tx debug */ 155 /* For Tx debug */
166 //zm_assert(macp->TxBufCnt >= 0); // deleted because of always true 156 /*zm_assert(macp->TxBufCnt >= 0); // deleted because of always true*/
167 157
168 //if (idx != macp->TxBufHead) 158 /*if (idx != macp->TxBufHead)*/
169 if (macp->TxBufCnt < ZM_MAX_TX_BUF_NUM) 159 if (macp->TxBufCnt < ZM_MAX_TX_BUF_NUM) {
170 { 160 /*printk("CWY - zfwPutUsbTxBuffer ,macp->TxBufCnt = %d\n", macp->TxBufCnt);*/
171 //printk("CWY - zfwPutUsbTxBuffer ,macp->TxBufCnt = %d\n", macp->TxBufCnt); 161 TxQ = (UsbTxQ_t *)&(macp->UsbTxBufQ[macp->TxBufTail]);
172 TxQ = (UsbTxQ_t *)&(macp->UsbTxBufQ[macp->TxBufTail]); 162 memcpy(TxQ->hdr, hdr, hdrlen);
173 memcpy(TxQ->hdr, hdr, hdrlen); 163 TxQ->hdrlen = hdrlen;
174 TxQ->hdrlen = hdrlen; 164 memcpy(TxQ->snap, snap, snapLen);
175 memcpy(TxQ->snap, snap, snapLen); 165 TxQ->snapLen = snapLen;
176 TxQ->snapLen = snapLen; 166 memcpy(TxQ->tail, tail, tailLen);
177 memcpy(TxQ->tail, tail, tailLen); 167 TxQ->tailLen = tailLen;
178 TxQ->tailLen = tailLen; 168 TxQ->buf = buf;
179 TxQ->buf = buf; 169 TxQ->offset = offset;
180 TxQ->offset = offset; 170
181 171 macp->TxBufTail = ((macp->TxBufTail+1) & (ZM_MAX_TX_BUF_NUM - 1));
182 macp->TxBufTail = ((macp->TxBufTail+1) & (ZM_MAX_TX_BUF_NUM - 1)); 172 macp->TxBufCnt++;
183 macp->TxBufCnt++; 173 } else {
184 } 174 printk(KERN_ERR "zfLnxPutUsbTxBuffer UsbTxBufQ inconsistent: TxBufHead: %d, TxBufTail: %d, TxBufCnt: %d\n",
185 else 175 macp->TxBufHead, macp->TxBufTail, macp->TxBufCnt);
186 { 176 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
187 printk(KERN_ERR "zfLnxPutUsbTxBuffer UsbTxBufQ inconsistent: TxBufHead: %d, TxBufTail: %d, TxBufCnt: %d\n", 177 return 0xffff;
188 macp->TxBufHead, macp->TxBufTail, macp->TxBufCnt); 178 }
189 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
190 return 0xffff;
191 }
192 179
193 spin_unlock_irqrestore(&macp->cs_lock, irqFlag); 180 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
194 return 0; 181 return 0;
@@ -197,28 +184,25 @@ u16_t zfLnxPutUsbTxBuffer(zdev_t *dev, u8_t *hdr, u16_t hdrlen,
197zbuf_t *zfLnxGetUsbRxBuffer(zdev_t *dev) 184zbuf_t *zfLnxGetUsbRxBuffer(zdev_t *dev)
198{ 185{
199 struct usbdrv_private *macp = dev->ml_priv; 186 struct usbdrv_private *macp = dev->ml_priv;
200 //u16_t idx; 187 /*u16_t idx;*/
201 zbuf_t *buf; 188 zbuf_t *buf;
202 unsigned long irqFlag; 189 unsigned long irqFlag;
203 190
204 spin_lock_irqsave(&macp->cs_lock, irqFlag); 191 spin_lock_irqsave(&macp->cs_lock, irqFlag);
205 192
206 //idx = ((macp->RxBufHead+1) & (ZM_MAX_RX_URB_NUM - 1)); 193 /*idx = ((macp->RxBufHead+1) & (ZM_MAX_RX_URB_NUM - 1));*/
207 194
208 //if (idx != macp->RxBufTail) 195 /*if (idx != macp->RxBufTail)*/
209 if (macp->RxBufCnt != 0) 196 if (macp->RxBufCnt != 0) {
210 { 197 buf = macp->UsbRxBufQ[macp->RxBufHead];
211 buf = macp->UsbRxBufQ[macp->RxBufHead]; 198 macp->RxBufHead = ((macp->RxBufHead+1) & (ZM_MAX_RX_URB_NUM - 1));
212 macp->RxBufHead = ((macp->RxBufHead+1) & (ZM_MAX_RX_URB_NUM - 1)); 199 macp->RxBufCnt--;
213 macp->RxBufCnt--; 200 } else {
214 } 201 printk("RxBufQ inconsistent: RxBufHead: %d, RxBufTail: %d\n",
215 else 202 macp->RxBufHead, macp->RxBufTail);
216 { 203 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
217 printk("RxBufQ inconsistent: RxBufHead: %d, RxBufTail: %d\n", 204 return NULL;
218 macp->RxBufHead, macp->RxBufTail); 205 }
219 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
220 return NULL;
221 }
222 206
223 spin_unlock_irqrestore(&macp->cs_lock, irqFlag); 207 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
224 return buf; 208 return buf;
@@ -234,61 +218,56 @@ u32_t zfLnxPutUsbRxBuffer(zdev_t *dev, zbuf_t *buf)
234 218
235 idx = ((macp->RxBufTail+1) & (ZM_MAX_RX_URB_NUM - 1)); 219 idx = ((macp->RxBufTail+1) & (ZM_MAX_RX_URB_NUM - 1));
236 220
237 //if (idx != macp->RxBufHead) 221 /*if (idx != macp->RxBufHead)*/
238 if (macp->RxBufCnt != ZM_MAX_RX_URB_NUM) 222 if (macp->RxBufCnt != ZM_MAX_RX_URB_NUM) {
239 { 223 macp->UsbRxBufQ[macp->RxBufTail] = buf;
240 macp->UsbRxBufQ[macp->RxBufTail] = buf; 224 macp->RxBufTail = idx;
241 macp->RxBufTail = idx; 225 macp->RxBufCnt++;
242 macp->RxBufCnt++; 226 } else {
243 } 227 printk("RxBufQ inconsistent: RxBufHead: %d, RxBufTail: %d\n",
244 else 228 macp->RxBufHead, macp->RxBufTail);
245 { 229 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
246 printk("RxBufQ inconsistent: RxBufHead: %d, RxBufTail: %d\n", 230 return 0xffff;
247 macp->RxBufHead, macp->RxBufTail); 231 }
248 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
249 return 0xffff;
250 }
251 232
252 spin_unlock_irqrestore(&macp->cs_lock, irqFlag); 233 spin_unlock_irqrestore(&macp->cs_lock, irqFlag);
253 return 0; 234 return 0;
254} 235}
255 236
256void zfLnxUsbDataOut_callback(urb_t *urb) 237void zfLnxUsbDataOut_callback(urb_t *urb)
257{ 238{
258 zdev_t* dev = urb->context; 239 zdev_t *dev = urb->context;
259 //UsbTxQ_t *TxData; 240 /*UsbTxQ_t *TxData;*/
260 241
261 /* Give the urb back */ 242 /* Give the urb back */
262 zfLnxPutTxUrb(dev); 243 zfLnxPutTxUrb(dev);
263 244
264 /* Check whether there is any pending buffer needed */ 245 /* Check whether there is any pending buffer needed */
265 /* to be sent */ 246 /* to be sent */
266 if (zfLnxCheckTxBufferCnt(dev) != 0) 247 if (zfLnxCheckTxBufferCnt(dev) != 0) {
267 { 248 /*TxData = zfwGetUsbTxBuffer(dev);
268 //TxData = zfwGetUsbTxBuffer(dev); 249 //if (TxData == NULL)
269 250 //{
270 //if (TxData == NULL) 251 // printk("Get a NULL buffer from zfwGetUsbTxBuffer\n");
271 //{ 252 // return;
272 // printk("Get a NULL buffer from zfwGetUsbTxBuffer\n"); 253 //}
273 // return; 254 //else
274 //} 255 //{
275 //else 256 zfLnxUsbSubmitTxData(dev);
276 //{ 257 //}*/
277 zfLnxUsbSubmitTxData(dev);
278 //}
279 } 258 }
280} 259}
281 260
282void zfLnxUsbDataIn_callback(urb_t *urb) 261void zfLnxUsbDataIn_callback(urb_t *urb)
283{ 262{
284 zdev_t* dev = urb->context; 263 zdev_t *dev = urb->context;
285 struct usbdrv_private *macp = dev->ml_priv; 264 struct usbdrv_private *macp = dev->ml_priv;
286 zbuf_t *buf; 265 zbuf_t *buf;
287 zbuf_t *new_buf; 266 zbuf_t *new_buf;
288 int status; 267 int status;
289 268
290#if ZM_USB_STREAM_MODE == 1 269#if ZM_USB_STREAM_MODE == 1
291 static int remain_len = 0, check_pad = 0, check_len = 0; 270 static int remain_len, check_pad, check_len;
292 int index = 0; 271 int index = 0;
293 int chk_idx; 272 int chk_idx;
294 u16_t pkt_len; 273 u16_t pkt_len;
@@ -299,47 +278,45 @@ void zfLnxUsbDataIn_callback(urb_t *urb)
299#endif 278#endif
300 279
301 /* Check status for URB */ 280 /* Check status for URB */
302 if (urb->status != 0){ 281 if (urb->status != 0) {
303 printk("zfLnxUsbDataIn_callback() : status=0x%x\n", urb->status); 282 printk("zfLnxUsbDataIn_callback() : status=0x%x\n", urb->status);
304 if ((urb->status != -ENOENT) && (urb->status != -ECONNRESET) 283 if ((urb->status != -ENOENT) && (urb->status != -ECONNRESET)
305 && (urb->status != -ESHUTDOWN)) 284 && (urb->status != -ESHUTDOWN)) {
306 { 285 if (urb->status == -EPIPE) {
307 if (urb->status == -EPIPE){ 286 /*printk(KERN_ERR "nonzero read bulk status received: -EPIPE");*/
308 //printk(KERN_ERR "nonzero read bulk status received: -EPIPE"); 287 status = -1;
309 status = -1; 288 }
310 } 289
311 290 if (urb->status == -EPROTO) {
312 if (urb->status == -EPROTO){ 291 /*printk(KERN_ERR "nonzero read bulk status received: -EPROTO");*/
313 //printk(KERN_ERR "nonzero read bulk status received: -EPROTO"); 292 status = -1;
314 status = -1; 293 }
315 } 294 }
316 } 295
317 296 /*printk(KERN_ERR "urb->status: 0x%08x\n", urb->status);*/
318 //printk(KERN_ERR "urb->status: 0x%08x\n", urb->status); 297
319 298 /* Dequeue skb buffer */
320 /* Dequeue skb buffer */ 299 buf = zfLnxGetUsbRxBuffer(dev);
321 buf = zfLnxGetUsbRxBuffer(dev); 300 dev_kfree_skb_any(buf);
322 dev_kfree_skb_any(buf); 301 #if 0
323 #if 0 302 /* Enqueue skb buffer */
324 /* Enqueue skb buffer */ 303 zfLnxPutUsbRxBuffer(dev, buf);
325 zfLnxPutUsbRxBuffer(dev, buf);
326
327 /* Submit a Rx urb */
328 zfLnxUsbIn(dev, urb, buf);
329 #endif
330 return;
331 }
332 304
333 if (urb->actual_length == 0) 305 /* Submit a Rx urb */
334 { 306 zfLnxUsbIn(dev, urb, buf);
335 printk(KERN_ERR "Get an URB whose length is zero"); 307 #endif
336 status = -1; 308 return;
309 }
310
311 if (urb->actual_length == 0) {
312 printk(KERN_ERR "Get an URB whose length is zero");
313 status = -1;
337 } 314 }
338 315
339 /* Dequeue skb buffer */ 316 /* Dequeue skb buffer */
340 buf = zfLnxGetUsbRxBuffer(dev); 317 buf = zfLnxGetUsbRxBuffer(dev);
341 318
342 //zfwBufSetSize(dev, buf, urb->actual_length); 319 /*zfwBufSetSize(dev, buf, urb->actual_length);*/
343#ifdef NET_SKBUFF_DATA_USES_OFFSET 320#ifdef NET_SKBUFF_DATA_USES_OFFSET
344 buf->tail = 0; 321 buf->tail = 0;
345 buf->len = 0; 322 buf->len = 0;
@@ -353,134 +330,122 @@ void zfLnxUsbDataIn_callback(urb_t *urb)
353 skb_put(buf, urb->actual_length); 330 skb_put(buf, urb->actual_length);
354 331
355#if ZM_USB_STREAM_MODE == 1 332#if ZM_USB_STREAM_MODE == 1
356 if (remain_len != 0) 333 if (remain_len != 0) {
357 { 334 zbuf_t *remain_buf = macp->reamin_buf;
358 zbuf_t *remain_buf = macp->reamin_buf;
359 335
360 index = remain_len; 336 index = remain_len;
361 remain_len -= check_pad; 337 remain_len -= check_pad;
362 338
363 /* Copy data */ 339 /* Copy data */
364 memcpy(&(remain_buf->data[check_len]), buf->data, remain_len); 340 memcpy(&(remain_buf->data[check_len]), buf->data, remain_len);
365 check_len += remain_len; 341 check_len += remain_len;
366 remain_len = 0; 342 remain_len = 0;
367 343
368 rxBufPool[rxBufPoolIndex++] = remain_buf; 344 rxBufPool[rxBufPoolIndex++] = remain_buf;
369 } 345 }
370 346
371 while(index < urb->actual_length) 347 while (index < urb->actual_length) {
372 { 348 pkt_len = buf->data[index] + (buf->data[index+1] << 8);
373 pkt_len = buf->data[index] + (buf->data[index+1] << 8); 349 pkt_tag = buf->data[index+2] + (buf->data[index+3] << 8);
374 pkt_tag = buf->data[index+2] + (buf->data[index+3] << 8); 350
375 351 if (pkt_tag == 0x4e00) {
376 if (pkt_tag == 0x4e00) 352 int pad_len;
377 { 353
378 int pad_len; 354 /*printk("Get a packet, index: %d, pkt_len: 0x%04x\n", index, pkt_len);*/
379 355 #if 0
380 //printk("Get a packet, index: %d, pkt_len: 0x%04x\n", index, pkt_len); 356 /* Dump data */
381 #if 0 357 for (ii = index; ii < pkt_len+4;) {
382 /* Dump data */ 358 printk("%02x ", (buf->data[ii] & 0xff));
383 for (ii = index; ii < pkt_len+4;) 359
384 { 360 if ((++ii % 16) == 0)
385 printk("%02x ", (buf->data[ii] & 0xff)); 361 printk("\n");
386 362 }
387 if ((++ii % 16) == 0) 363
388 printk("\n"); 364 printk("\n");
389 } 365 #endif
390 366
391 printk("\n"); 367 pad_len = 4 - (pkt_len & 0x3);
392 #endif 368
393 369 if (pad_len == 4)
394 pad_len = 4 - (pkt_len & 0x3); 370 pad_len = 0;
395 371
396 if(pad_len == 4) 372 chk_idx = index;
397 pad_len = 0; 373 index = index + 4 + pkt_len + pad_len;
398 374
399 chk_idx = index; 375 if (index > ZM_MAX_RX_BUFFER_SIZE) {
400 index = index + 4 + pkt_len + pad_len; 376 remain_len = index - ZM_MAX_RX_BUFFER_SIZE; /* - pad_len;*/
401 377 check_len = ZM_MAX_RX_BUFFER_SIZE - chk_idx - 4;
402 if (index > ZM_MAX_RX_BUFFER_SIZE) 378 check_pad = pad_len;
403 { 379
404 remain_len = index - ZM_MAX_RX_BUFFER_SIZE; // - pad_len; 380 /* Allocate a skb buffer */
405 check_len = ZM_MAX_RX_BUFFER_SIZE - chk_idx - 4; 381 /*new_buf = zfwBufAllocate(dev, ZM_MAX_RX_BUFFER_SIZE);*/
406 check_pad = pad_len; 382 new_buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE);
407 383
408 /* Allocate a skb buffer */ 384 /* Set skb buffer length */
409 //new_buf = zfwBufAllocate(dev, ZM_MAX_RX_BUFFER_SIZE); 385 #ifdef NET_SKBUFF_DATA_USES_OFFSET
410 new_buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE); 386 new_buf->tail = 0;
411 387 new_buf->len = 0;
412 /* Set skb buffer length */ 388 #else
413 #ifdef NET_SKBUFF_DATA_USES_OFFSET 389 new_buf->tail = new_buf->data;
414 new_buf->tail = 0; 390 new_buf->len = 0;
415 new_buf->len = 0; 391 #endif
416 #else 392
417 new_buf->tail = new_buf->data; 393 skb_put(new_buf, pkt_len);
418 new_buf->len = 0; 394
419 #endif 395 /* Copy the buffer */
420 396 memcpy(new_buf->data, &(buf->data[chk_idx+4]), check_len);
421 skb_put(new_buf, pkt_len); 397
422 398 /* Record the buffer pointer */
423 /* Copy the buffer */ 399 macp->reamin_buf = new_buf;
424 memcpy(new_buf->data, &(buf->data[chk_idx+4]), check_len); 400 } else {
425 401 #ifdef ZM_DONT_COPY_RX_BUFFER
426 /* Record the buffer pointer */ 402 if (rxBufPoolIndex == 0) {
427 macp->reamin_buf = new_buf; 403 new_buf = skb_clone(buf, GFP_ATOMIC);
428 } 404
429 else 405 new_buf->data = &(buf->data[chk_idx+4]);
430 { 406 new_buf->len = pkt_len;
431 #ifdef ZM_DONT_COPY_RX_BUFFER 407 } else {
432 if (rxBufPoolIndex == 0) 408 #endif
433 { 409 /* Allocate a skb buffer */
434 new_buf = skb_clone(buf, GFP_ATOMIC); 410 new_buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE);
435 411
436 new_buf->data = &(buf->data[chk_idx+4]); 412 /* Set skb buffer length */
437 new_buf->len = pkt_len; 413 #ifdef NET_SKBUFF_DATA_USES_OFFSET
438 } 414 new_buf->tail = 0;
439 else 415 new_buf->len = 0;
440 { 416 #else
441 #endif 417 new_buf->tail = new_buf->data;
442 /* Allocate a skb buffer */ 418 new_buf->len = 0;
443 new_buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE); 419 #endif
444 420
445 /* Set skb buffer length */ 421 skb_put(new_buf, pkt_len);
446 #ifdef NET_SKBUFF_DATA_USES_OFFSET 422
447 new_buf->tail = 0; 423 /* Copy the buffer */
448 new_buf->len = 0; 424 memcpy(new_buf->data, &(buf->data[chk_idx+4]), pkt_len);
449 #else 425
450 new_buf->tail = new_buf->data; 426 #ifdef ZM_DONT_COPY_RX_BUFFER
451 new_buf->len = 0; 427 }
452 #endif 428 #endif
453 429 rxBufPool[rxBufPoolIndex++] = new_buf;
454 skb_put(new_buf, pkt_len); 430 }
455 431 } else {
456 /* Copy the buffer */ 432 printk(KERN_ERR "Can't find tag, pkt_len: 0x%04x, tag: 0x%04x\n", pkt_len, pkt_tag);
457 memcpy(new_buf->data, &(buf->data[chk_idx+4]), pkt_len); 433
458 434 /* Free buffer */
459 #ifdef ZM_DONT_COPY_RX_BUFFER 435 dev_kfree_skb_any(buf);
460 } 436
461 #endif 437 /* Allocate a skb buffer */
462 rxBufPool[rxBufPoolIndex++] = new_buf; 438 new_buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE);
463 } 439
464 } 440 /* Enqueue skb buffer */
465 else 441 zfLnxPutUsbRxBuffer(dev, new_buf);
466 { 442
467 printk(KERN_ERR "Can't find tag, pkt_len: 0x%04x, tag: 0x%04x\n", pkt_len, pkt_tag); 443 /* Submit a Rx urb */
468 444 zfLnxUsbIn(dev, urb, new_buf);
469 /* Free buffer */ 445
470 dev_kfree_skb_any(buf); 446 return;
471 447 }
472 /* Allocate a skb buffer */ 448 }
473 new_buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE);
474
475 /* Enqueue skb buffer */
476 zfLnxPutUsbRxBuffer(dev, new_buf);
477
478 /* Submit a Rx urb */
479 zfLnxUsbIn(dev, urb, new_buf);
480
481 return;
482 }
483 }
484 449
485 /* Free buffer */ 450 /* Free buffer */
486 dev_kfree_skb_any(buf); 451 dev_kfree_skb_any(buf);
@@ -496,9 +461,8 @@ void zfLnxUsbDataIn_callback(urb_t *urb)
496 zfLnxUsbIn(dev, urb, new_buf); 461 zfLnxUsbIn(dev, urb, new_buf);
497 462
498#if ZM_USB_STREAM_MODE == 1 463#if ZM_USB_STREAM_MODE == 1
499 for(ii = 0; ii < rxBufPoolIndex; ii++) 464 for (ii = 0; ii < rxBufPoolIndex; ii++) {
500 { 465 macp->usbCbFunctions.zfcbUsbRecv(dev, rxBufPool[ii]);
501 macp->usbCbFunctions.zfcbUsbRecv(dev, rxBufPool[ii]);
502 } 466 }
503#else 467#else
504 /* pass data to upper layer */ 468 /* pass data to upper layer */
@@ -508,51 +472,48 @@ void zfLnxUsbDataIn_callback(urb_t *urb)
508 472
509void zfLnxUsbRegOut_callback(urb_t *urb) 473void zfLnxUsbRegOut_callback(urb_t *urb)
510{ 474{
511 //dev_t* dev = urb->context; 475 /*dev_t* dev = urb->context;*/
512 476
513 //printk(KERN_ERR "zfwUsbRegOut_callback\n"); 477 /*printk(KERN_ERR "zfwUsbRegOut_callback\n");*/
514} 478}
515 479
516void zfLnxUsbRegIn_callback(urb_t *urb) 480void zfLnxUsbRegIn_callback(urb_t *urb)
517{ 481{
518 zdev_t* dev = urb->context; 482 zdev_t *dev = urb->context;
519 u32_t rsp[64/4]; 483 u32_t rsp[64/4];
520 int status; 484 int status;
521 struct usbdrv_private *macp = dev->ml_priv; 485 struct usbdrv_private *macp = dev->ml_priv;
522 486
523 /* Check status for URB */ 487 /* Check status for URB */
524 if (urb->status != 0){ 488 if (urb->status != 0) {
525 printk("zfLnxUsbRegIn_callback() : status=0x%x\n", urb->status); 489 printk("zfLnxUsbRegIn_callback() : status=0x%x\n", urb->status);
526 if ((urb->status != -ENOENT) && (urb->status != -ECONNRESET) 490 if ((urb->status != -ENOENT) && (urb->status != -ECONNRESET) && (urb->status != -ESHUTDOWN)) {
527 && (urb->status != -ESHUTDOWN)) 491 if (urb->status == -EPIPE) {
528 { 492 /*printk(KERN_ERR "nonzero read bulk status received: -EPIPE");*/
529 if (urb->status == -EPIPE){ 493 status = -1;
530 //printk(KERN_ERR "nonzero read bulk status received: -EPIPE"); 494 }
531 status = -1; 495
532 } 496 if (urb->status == -EPROTO) {
533 497 /*printk(KERN_ERR "nonzero read bulk status received: -EPROTO");*/
534 if (urb->status == -EPROTO){ 498 status = -1;
535 //printk(KERN_ERR "nonzero read bulk status received: -EPROTO"); 499 }
536 status = -1; 500 }
537 } 501
538 } 502 /*printk(KERN_ERR "urb->status: 0x%08x\n", urb->status);*/
539 503 return;
540 //printk(KERN_ERR "urb->status: 0x%08x\n", urb->status); 504 }
541 return;
542 }
543 505
544 if (urb->actual_length == 0) 506 if (urb->actual_length == 0) {
545 { 507 printk(KERN_ERR "Get an URB whose length is zero");
546 printk(KERN_ERR "Get an URB whose length is zero"); 508 status = -1;
547 status = -1;
548 } 509 }
549 510
550 /* Copy data into respone buffer */ 511 /* Copy data into respone buffer */
551 memcpy(rsp, macp->regUsbReadBuf, urb->actual_length); 512 memcpy(rsp, macp->regUsbReadBuf, urb->actual_length);
552 513
553 /* Notify to upper layer */ 514 /* Notify to upper layer */
554 //zfIdlChkRsp(dev, rsp, (u16_t)urb->actual_length); 515 /*zfIdlChkRsp(dev, rsp, (u16_t)urb->actual_length);*/
555 //zfiUsbRegIn(dev, rsp, (u16_t)urb->actual_length); 516 /*zfiUsbRegIn(dev, rsp, (u16_t)urb->actual_length);*/
556 macp->usbCbFunctions.zfcbUsbRegIn(dev, rsp, (u16_t)urb->actual_length); 517 macp->usbCbFunctions.zfcbUsbRegIn(dev, rsp, (u16_t)urb->actual_length);
557 518
558 /* Issue another USB IN URB */ 519 /* Issue another USB IN URB */
@@ -564,22 +525,22 @@ u32_t zfLnxSubmitRegInUrb(zdev_t *dev)
564 u32_t ret; 525 u32_t ret;
565 struct usbdrv_private *macp = dev->ml_priv; 526 struct usbdrv_private *macp = dev->ml_priv;
566 527
567 /* Submit a rx urb */ 528 /* Submit a rx urb
568 //ret = zfLnxUsbSubmitBulkUrb(macp->RegInUrb, macp->udev, 529 //ret = zfLnxUsbSubmitBulkUrb(macp->RegInUrb, macp->udev,
569 // USB_REG_IN_PIPE, USB_DIR_IN, macp->regUsbReadBuf, 530 // USB_REG_IN_PIPE, USB_DIR_IN, macp->regUsbReadBuf,
570 // ZM_USB_REG_MAX_BUF_SIZE, zfLnxUsbRegIn_callback, dev); 531 // ZM_USB_REG_MAX_BUF_SIZE, zfLnxUsbRegIn_callback, dev);
571 //CWYang(-) 532 //CWYang(-)
572 //if (ret != 0) 533 //if (ret != 0)
573 // printk("zfwUsbSubmitBulkUrb fail, status: 0x%08x\n", (int)ret); 534 // printk("zfwUsbSubmitBulkUrb fail, status: 0x%08x\n", (int)ret);*/
574 535
575 ret = zfLnxUsbSubmitIntUrb(macp->RegInUrb, macp->udev, 536 ret = zfLnxUsbSubmitIntUrb(macp->RegInUrb, macp->udev,
576 USB_REG_IN_PIPE, USB_DIR_IN, macp->regUsbReadBuf, 537 USB_REG_IN_PIPE, USB_DIR_IN, macp->regUsbReadBuf,
577 ZM_USB_REG_MAX_BUF_SIZE, zfLnxUsbRegIn_callback, dev, 1); 538 ZM_USB_REG_MAX_BUF_SIZE, zfLnxUsbRegIn_callback, dev, 1);
578 539
579 return ret; 540 return ret;
580} 541}
581 542
582u32_t zfLnxUsbSubmitTxData(zdev_t* dev) 543u32_t zfLnxUsbSubmitTxData(zdev_t *dev)
583{ 544{
584 u32_t i; 545 u32_t i;
585 u32_t ret; 546 u32_t ret;
@@ -600,39 +561,33 @@ u32_t zfLnxUsbSubmitTxData(zdev_t* dev)
600 freeTxUrb = zfLnxGetFreeTxUrb(dev); 561 freeTxUrb = zfLnxGetFreeTxUrb(dev);
601 562
602 /* If there is no any free Tx Urb */ 563 /* If there is no any free Tx Urb */
603 if (freeTxUrb == 0xffff) 564 if (freeTxUrb == 0xffff) {
604 { 565 /*printk(KERN_ERR "Can't get free Tx Urb\n");
605 //printk(KERN_ERR "Can't get free Tx Urb\n"); 566 //printk("CWY - Can't get free Tx Urb\n");*/
606 //printk("CWY - Can't get free Tx Urb\n"); 567 return 0xffff;
607 return 0xffff;
608 } 568 }
609 569
610#if ZM_USB_TX_STREAM_MODE == 1 570#if ZM_USB_TX_STREAM_MODE == 1
611 usbTxAggCnt = zfLnxCheckTxBufferCnt(dev); 571 usbTxAggCnt = zfLnxCheckTxBufferCnt(dev);
612 572
613 if (usbTxAggCnt >= ZM_MAX_TX_AGGREGATE_NUM) 573 if (usbTxAggCnt >= ZM_MAX_TX_AGGREGATE_NUM) {
614 { 574 usbTxAggCnt = ZM_MAX_TX_AGGREGATE_NUM;
615 usbTxAggCnt = ZM_MAX_TX_AGGREGATE_NUM; 575 } else {
616 } 576 usbTxAggCnt = 1;
617 else
618 {
619 usbTxAggCnt = 1;
620 } 577 }
621 578
622 //printk("usbTxAggCnt: %d\n", usbTxAggCnt); 579 /*printk("usbTxAggCnt: %d\n", usbTxAggCnt);*/
623#endif 580#endif
624 581
625#if ZM_USB_TX_STREAM_MODE == 1 582#if ZM_USB_TX_STREAM_MODE == 1
626 for(ii = 0; ii < usbTxAggCnt; ii++) 583 for (ii = 0; ii < usbTxAggCnt; ii++) {
627 {
628#endif 584#endif
629 /* Dequeue the packet from UsbTxBufQ */ 585 /* Dequeue the packet from UsbTxBufQ */
630 TxData = zfLnxGetUsbTxBuffer(dev); 586 TxData = zfLnxGetUsbTxBuffer(dev);
631 if (TxData == NULL) 587 if (TxData == NULL) {
632 { 588 /* Give the urb back */
633 /* Give the urb back */ 589 zfLnxPutTxUrb(dev);
634 zfLnxPutTxUrb(dev); 590 return 0xffff;
635 return 0xffff;
636 } 591 }
637 592
638 /* Point to the freeTxUrb buffer */ 593 /* Point to the freeTxUrb buffer */
@@ -644,114 +599,103 @@ u32_t zfLnxUsbSubmitTxData(zdev_t* dev)
644 599
645 /* Add the packet length and tag information */ 600 /* Add the packet length and tag information */
646 *pUsbTxHdr++ = TxData->hdrlen + TxData->snapLen + 601 *pUsbTxHdr++ = TxData->hdrlen + TxData->snapLen +
647 (TxData->buf->len - TxData->offset) + TxData->tailLen; 602 (TxData->buf->len - TxData->offset) + TxData->tailLen;
648 603
649 *pUsbTxHdr++ = 0x697e; 604 *pUsbTxHdr++ = 0x697e;
650 605
651 puTxBuf += 4; 606 puTxBuf += 4;
652#endif // #ifdef ZM_USB_TX_STREAM_MODE 607#endif /* #ifdef ZM_USB_TX_STREAM_MODE*/
653 608
654 /* Copy WLAN header and packet buffer into USB buffer */ 609 /* Copy WLAN header and packet buffer into USB buffer */
655 for(i = 0; i < TxData->hdrlen; i++) 610 for (i = 0; i < TxData->hdrlen; i++) {
656 { 611 *puTxBuf++ = TxData->hdr[i];
657 *puTxBuf++ = TxData->hdr[i];
658 } 612 }
659 613
660 /* Copy SNAP header */ 614 /* Copy SNAP header */
661 for(i = 0; i < TxData->snapLen; i++) 615 for (i = 0; i < TxData->snapLen; i++) {
662 { 616 *puTxBuf++ = TxData->snap[i];
663 *puTxBuf++ = TxData->snap[i];
664 } 617 }
665 618
666 /* Copy packet buffer */ 619 /* Copy packet buffer */
667 for(i = 0; i < TxData->buf->len - TxData->offset; i++) 620 for (i = 0; i < TxData->buf->len - TxData->offset; i++) {
668 { 621 /*puTxBuf++ = zmw_rx_buf_readb(dev, TxData->buf, i);*/
669 //*puTxBuf++ = zmw_rx_buf_readb(dev, TxData->buf, i); 622 *puTxBuf++ = *(u8_t *)((u8_t *)TxData->buf->data+i+TxData->offset);
670 *puTxBuf++ = *(u8_t*)((u8_t*)TxData->buf->data+i+TxData->offset);
671 } 623 }
672 624
673 /* Copy tail */ 625 /* Copy tail */
674 for(i = 0; i < TxData->tailLen; i++) 626 for (i = 0; i < TxData->tailLen; i++) {
675 { 627 *puTxBuf++ = TxData->tail[i];
676 *puTxBuf++ = TxData->tail[i];
677 } 628 }
678 629
679 len = TxData->hdrlen+TxData->snapLen+TxData->buf->len+TxData->tailLen-TxData->offset; 630 len = TxData->hdrlen+TxData->snapLen+TxData->buf->len+TxData->tailLen-TxData->offset;
680 631
681 #if 0 632 #if 0
682 if (TxData->hdrlen != 0) 633 if (TxData->hdrlen != 0) {
683 { 634 puTxBuf = macp->txUsbBuf[freeTxUrb];
684 puTxBuf = macp->txUsbBuf[freeTxUrb]; 635 for (i = 0; i < len; i++) {
685 for (i = 0; i < len; i++) 636 printk("%02x ", puTxBuf[i]);
686 { 637 if (i % 16 == 15)
687 printk("%02x ", puTxBuf[i]); 638 printk("\n");
688 if (i % 16 == 15) 639 }
689 printk("\n"); 640 printk("\n");
690 } 641 }
691 printk("\n");
692 }
693 #endif 642 #endif
694 #if 0 643 #if 0
695 /* For debug purpose */ 644 /* For debug purpose */
696 if(TxData->hdr[9] & 0x40) 645 if (TxData->hdr[9] & 0x40) {
697 { 646 int i;
698 int i; 647 u16_t ctrlLen = TxData->hdr[0] + (TxData->hdr[1] << 8);
699 u16_t ctrlLen = TxData->hdr[0] + (TxData->hdr[1] << 8); 648
700 649 if (ctrlLen != len + 4) {
701 if (ctrlLen != len + 4) 650 /* Dump control setting */
702 { 651 for (i = 0; i < 8; i++) {
703 /* Dump control setting */ 652 printk(KERN_ERR "0x%02x ", TxData->hdr[i]);
704 for(i = 0; i < 8; i++) 653 }
705 { 654 printk(KERN_ERR "\n");
706 printk(KERN_ERR "0x%02x ", TxData->hdr[i]); 655
707 } 656 printk(KERN_ERR "ctrLen: %d, hdrLen: %d, snapLen: %d\n", ctrlLen, TxData->hdrlen, TxData->snapLen);
708 printk(KERN_ERR "\n"); 657 printk(KERN_ERR "bufLen: %d, tailLen: %d, len: %d\n", TxData->buf->len, TxData->tailLen, len);
709 658 }
710 printk(KERN_ERR "ctrLen: %d, hdrLen: %d, snapLen: %d\n", ctrlLen, TxData->hdrlen, TxData->snapLen);
711 printk(KERN_ERR "bufLen: %d, tailLen: %d, len: %d\n", TxData->buf->len, TxData->tailLen, len);
712 }
713 } 659 }
714 #endif 660 #endif
715 661
716#if ZM_USB_TX_STREAM_MODE == 1 662#if ZM_USB_TX_STREAM_MODE == 1
717 // Add the Length and Tag 663 /* Add the Length and Tag*/
718 len += 4; 664 len += 4;
719 665
720 //printk("%d packet, length: %d\n", ii+1, len); 666 /*printk("%d packet, length: %d\n", ii+1, len);*/
721 667
722 if (ii < (ZM_MAX_TX_AGGREGATE_NUM-1)) 668 if (ii < (ZM_MAX_TX_AGGREGATE_NUM-1)) {
723 { 669 /* Pad the buffer to firmware descriptor boundary */
724 /* Pad the buffer to firmware descriptor boundary */ 670 offset += (((len-1) / 4) + 1) * 4;
725 offset += (((len-1) / 4) + 1) * 4;
726 } 671 }
727 672
728 if (ii == (ZM_MAX_TX_AGGREGATE_NUM-1)) 673 if (ii == (ZM_MAX_TX_AGGREGATE_NUM-1)) {
729 { 674 len += offset;
730 len += offset;
731 } 675 }
732 676
733 TxQPool[ii] = TxData; 677 TxQPool[ii] = TxData;
734 678
735 //DbgPrint("%d packet, offset: %d\n", ii+1, pUsbTxTransfer->offset); 679 /*DbgPrint("%d packet, offset: %d\n", ii+1, pUsbTxTransfer->offset);*/
736 680
737 /* free packet */ 681 /* free packet */
738 //zfBufFree(dev, txData->buf); 682 /*zfBufFree(dev, txData->buf);*/
739 } 683 }
740#endif 684#endif
741 //printk("CWY - call zfwUsbSubmitBulkUrb(), len = 0x%d\n", len); 685 /*printk("CWY - call zfwUsbSubmitBulkUrb(), len = 0x%d\n", len);*/
742 /* Submit a tx urb */ 686 /* Submit a tx urb */
743 ret = zfLnxUsbSubmitBulkUrb(macp->WlanTxDataUrb[freeTxUrb], macp->udev, 687 ret = zfLnxUsbSubmitBulkUrb(macp->WlanTxDataUrb[freeTxUrb], macp->udev,
744 USB_WLAN_TX_PIPE, USB_DIR_OUT, macp->txUsbBuf[freeTxUrb], 688 USB_WLAN_TX_PIPE, USB_DIR_OUT, macp->txUsbBuf[freeTxUrb],
745 len, zfLnxUsbDataOut_callback, dev); 689 len, zfLnxUsbDataOut_callback, dev);
746 //CWYang(-) 690 /*CWYang(-)
747 //if (ret != 0) 691 //if (ret != 0)
748 // printk("zfwUsbSubmitBulkUrb fail, status: 0x%08x\n", (int)ret); 692 // printk("zfwUsbSubmitBulkUrb fail, status: 0x%08x\n", (int)ret);*/
749 693
750 /* free packet */ 694 /* free packet */
751 //dev_kfree_skb_any(TxData->buf); 695 /*dev_kfree_skb_any(TxData->buf);*/
752#if ZM_USB_TX_STREAM_MODE == 1 696#if ZM_USB_TX_STREAM_MODE == 1
753 for(ii = 0; ii < usbTxAggCnt; ii++) 697 for (ii = 0; ii < usbTxAggCnt; ii++)
754 macp->usbCbFunctions.zfcbUsbOutComplete(dev, TxQPool[ii]->buf, 1, TxQPool[ii]->hdr); 698 macp->usbCbFunctions.zfcbUsbOutComplete(dev, TxQPool[ii]->buf, 1, TxQPool[ii]->hdr);
755#else 699#else
756 macp->usbCbFunctions.zfcbUsbOutComplete(dev, TxData->buf, 1, TxData->hdr); 700 macp->usbCbFunctions.zfcbUsbOutComplete(dev, TxData->buf, 1, TxData->hdr);
757#endif 701#endif
@@ -761,23 +705,23 @@ u32_t zfLnxUsbSubmitTxData(zdev_t* dev)
761 705
762 706
763 707
764u32_t zfLnxUsbIn(zdev_t* dev, urb_t *urb, zbuf_t *buf) 708u32_t zfLnxUsbIn(zdev_t *dev, urb_t *urb, zbuf_t *buf)
765{ 709{
766 u32_t ret; 710 u32_t ret;
767 struct usbdrv_private *macp = dev->ml_priv; 711 struct usbdrv_private *macp = dev->ml_priv;
768 712
769 /* Submit a rx urb */ 713 /* Submit a rx urb */
770 ret = zfLnxUsbSubmitBulkUrb(urb, macp->udev, USB_WLAN_RX_PIPE, 714 ret = zfLnxUsbSubmitBulkUrb(urb, macp->udev, USB_WLAN_RX_PIPE,
771 USB_DIR_IN, buf->data, ZM_MAX_RX_BUFFER_SIZE, 715 USB_DIR_IN, buf->data, ZM_MAX_RX_BUFFER_SIZE,
772 zfLnxUsbDataIn_callback, dev); 716 zfLnxUsbDataIn_callback, dev);
773 //CWYang(-) 717 /*CWYang(-)
774 //if (ret != 0) 718 //if (ret != 0)
775 // printk("zfwUsbSubmitBulkUrb fail, status: 0x%08x\n", (int)ret); 719 // printk("zfwUsbSubmitBulkUrb fail, status: 0x%08x\n", (int)ret);*/
776 720
777 return ret; 721 return ret;
778} 722}
779 723
780u32_t zfLnxUsbWriteReg(zdev_t* dev, u32_t* cmd, u16_t cmdLen) 724u32_t zfLnxUsbWriteReg(zdev_t *dev, u32_t *cmd, u16_t cmdLen)
781{ 725{
782 struct usbdrv_private *macp = dev->ml_priv; 726 struct usbdrv_private *macp = dev->ml_priv;
783 u32_t ret; 727 u32_t ret;
@@ -785,7 +729,7 @@ u32_t zfLnxUsbWriteReg(zdev_t* dev, u32_t* cmd, u16_t cmdLen)
785#ifdef ZM_CONFIG_BIG_ENDIAN 729#ifdef ZM_CONFIG_BIG_ENDIAN
786 int ii = 0; 730 int ii = 0;
787 731
788 for(ii=0; ii<(cmdLen>>2); ii++) 732 for (ii = 0; ii < (cmdLen>>2); ii++)
789 cmd[ii] = cpu_to_le32(cmd[ii]); 733 cmd[ii] = cpu_to_le32(cmd[ii]);
790#endif 734#endif
791 735
@@ -794,39 +738,38 @@ u32_t zfLnxUsbWriteReg(zdev_t* dev, u32_t* cmd, u16_t cmdLen)
794 /* Issue an USB Out transfer */ 738 /* Issue an USB Out transfer */
795 /* Submit a tx urb */ 739 /* Submit a tx urb */
796 ret = zfLnxUsbSubmitIntUrb(macp->RegOutUrb, macp->udev, 740 ret = zfLnxUsbSubmitIntUrb(macp->RegOutUrb, macp->udev,
797 USB_REG_OUT_PIPE, USB_DIR_OUT, macp->regUsbWriteBuf, 741 USB_REG_OUT_PIPE, USB_DIR_OUT, macp->regUsbWriteBuf,
798 cmdLen, zfLnxUsbRegOut_callback, dev, 1); 742 cmdLen, zfLnxUsbRegOut_callback, dev, 1);
799 743
800 return ret; 744 return ret;
801} 745}
802 746
803 747
804u32_t zfLnxUsbOut(zdev_t* dev, u8_t *hdr, u16_t hdrlen, u8_t *snap, u16_t snapLen, 748u32_t zfLnxUsbOut(zdev_t *dev, u8_t *hdr, u16_t hdrlen, u8_t *snap, u16_t snapLen,
805 u8_t *tail, u16_t tailLen, zbuf_t *buf, u16_t offset) 749 u8_t *tail, u16_t tailLen, zbuf_t *buf, u16_t offset)
806{ 750{
807 u32_t ret; 751 u32_t ret;
808 struct usbdrv_private *macp = dev->ml_priv; 752 struct usbdrv_private *macp = dev->ml_priv;
809 753
810 /* Check length of tail buffer */ 754 /* Check length of tail buffer */
811 //zm_assert((tailLen <= 16)); 755 /*zm_assert((tailLen <= 16));*/
812 756
813 /* Enqueue the packet into UsbTxBufQ */ 757 /* Enqueue the packet into UsbTxBufQ */
814 if (zfLnxPutUsbTxBuffer(dev, hdr, hdrlen, snap, snapLen, tail, tailLen, buf, offset) == 0xffff) 758 if (zfLnxPutUsbTxBuffer(dev, hdr, hdrlen, snap, snapLen, tail, tailLen, buf, offset) == 0xffff) {
815 { 759 /* free packet */
816 /* free packet */ 760 /*printk("CWY - zfwPutUsbTxBuffer Error, free packet\n");
817 //printk("CWY - zfwPutUsbTxBuffer Error, free packet\n"); 761 //dev_kfree_skb_any(buf);*/
818 //dev_kfree_skb_any(buf); 762 macp->usbCbFunctions.zfcbUsbOutComplete(dev, buf, 0, hdr);
819 macp->usbCbFunctions.zfcbUsbOutComplete(dev, buf, 0, hdr); 763 return 0xffff;
820 return 0xffff; 764 }
821 }
822 765
823 //return 0; 766 /*return 0;
824 //printk("CWY - call zfwUsbSubmitTxData()\n"); 767 //printk("CWY - call zfwUsbSubmitTxData()\n");*/
825 ret = zfLnxUsbSubmitTxData(dev); 768 ret = zfLnxUsbSubmitTxData(dev);
826 return ret; 769 return ret;
827} 770}
828 771
829void zfLnxInitUsbTxQ(zdev_t* dev) 772void zfLnxInitUsbTxQ(zdev_t *dev)
830{ 773{
831 struct usbdrv_private *macp = dev->ml_priv; 774 struct usbdrv_private *macp = dev->ml_priv;
832 775
@@ -842,7 +785,7 @@ void zfLnxInitUsbTxQ(zdev_t* dev)
842 macp->TxUrbCnt = ZM_MAX_TX_URB_NUM; 785 macp->TxUrbCnt = ZM_MAX_TX_URB_NUM;
843} 786}
844 787
845void zfLnxInitUsbRxQ(zdev_t* dev) 788void zfLnxInitUsbRxQ(zdev_t *dev)
846{ 789{
847 u16_t i; 790 u16_t i;
848 zbuf_t *buf; 791 zbuf_t *buf;
@@ -853,76 +796,65 @@ void zfLnxInitUsbRxQ(zdev_t* dev)
853 796
854 macp->RxBufHead = 0; 797 macp->RxBufHead = 0;
855 798
856 for (i = 0; i < ZM_MAX_RX_URB_NUM; i++) 799 for (i = 0; i < ZM_MAX_RX_URB_NUM; i++) {
857 { 800 /*buf = zfwBufAllocate(dev, ZM_MAX_RX_BUFFER_SIZE);*/
858 //buf = zfwBufAllocate(dev, ZM_MAX_RX_BUFFER_SIZE); 801 buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE);
859 buf = dev_alloc_skb(ZM_MAX_RX_BUFFER_SIZE); 802 macp->UsbRxBufQ[i] = buf;
860 macp->UsbRxBufQ[i] = buf; 803 }
861 }
862 804
863 //macp->RxBufTail = ZM_MAX_RX_URB_NUM - 1; 805 /*macp->RxBufTail = ZM_MAX_RX_URB_NUM - 1;*/
864 macp->RxBufTail = 0; 806 macp->RxBufTail = 0;
865 807
866 /* Submit all Rx urbs */ 808 /* Submit all Rx urbs */
867 for (i = 0; i < ZM_MAX_RX_URB_NUM; i++) 809 for (i = 0; i < ZM_MAX_RX_URB_NUM; i++) {
868 { 810 zfLnxPutUsbRxBuffer(dev, macp->UsbRxBufQ[i]);
869 zfLnxPutUsbRxBuffer(dev, macp->UsbRxBufQ[i]); 811 zfLnxUsbIn(dev, macp->WlanRxDataUrb[i], macp->UsbRxBufQ[i]);
870 zfLnxUsbIn(dev, macp->WlanRxDataUrb[i], macp->UsbRxBufQ[i]); 812 }
871 }
872} 813}
873 814
874 815
875 816
876u32_t zfLnxUsbSubmitBulkUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, 817u32_t zfLnxUsbSubmitBulkUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction,
877 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context) 818 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context)
878{ 819{
879 u32_t ret; 820 u32_t ret;
880 821
881 if(direction == USB_DIR_OUT) 822 if (direction == USB_DIR_OUT) {
882 { 823 usb_fill_bulk_urb(urb, usb, usb_sndbulkpipe(usb, epnum),
883 usb_fill_bulk_urb(urb, usb, usb_sndbulkpipe(usb, epnum), 824 transfer_buffer, buffer_length, complete, context);
884 transfer_buffer, buffer_length, complete, context);
885 825
886 urb->transfer_flags |= URB_ZERO_PACKET; 826 urb->transfer_flags |= URB_ZERO_PACKET;
887 } 827 } else {
888 else 828 usb_fill_bulk_urb(urb, usb, usb_rcvbulkpipe(usb, epnum),
889 { 829 transfer_buffer, buffer_length, complete, context);
890 usb_fill_bulk_urb(urb, usb, usb_rcvbulkpipe(usb, epnum),
891 transfer_buffer, buffer_length, complete, context);
892 } 830 }
893 831
894 if (epnum == 4) 832 if (epnum == 4) {
895 { 833 if (urb->hcpriv) {
896 if (urb->hcpriv) 834 /*printk("CWY - urb->hcpriv set by unknown reason, reset it\n");
897 { 835 //urb->hcpriv = 0;*/
898 //printk("CWY - urb->hcpriv set by unknown reason, reset it\n"); 836 }
899 //urb->hcpriv = 0; 837 }
900 }
901 }
902 838
903 ret = usb_submit_urb(urb, GFP_ATOMIC); 839 ret = usb_submit_urb(urb, GFP_ATOMIC);
904 if ((epnum == 4) & (ret != 0)) 840 if ((epnum == 4) & (ret != 0)) {
905 { 841 /*printk("CWY - ret = %x\n", ret);*/
906 //printk("CWY - ret = %x\n", ret);
907 } 842 }
908 return ret; 843 return ret;
909} 844}
910 845
911u32_t zfLnxUsbSubmitIntUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, 846u32_t zfLnxUsbSubmitIntUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction,
912 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context, 847 void *transfer_buffer, int buffer_length, usb_complete_t complete, void *context,
913 u32_t interval) 848 u32_t interval)
914{ 849{
915 u32_t ret; 850 u32_t ret;
916 851
917 if(direction == USB_DIR_OUT) 852 if (direction == USB_DIR_OUT) {
918 { 853 usb_fill_int_urb(urb, usb, usb_sndbulkpipe(usb, epnum),
919 usb_fill_int_urb(urb, usb, usb_sndbulkpipe(usb, epnum), 854 transfer_buffer, buffer_length, complete, context, interval);
920 transfer_buffer, buffer_length, complete, context, interval); 855 } else {
921 } 856 usb_fill_int_urb(urb, usb, usb_rcvbulkpipe(usb, epnum),
922 else 857 transfer_buffer, buffer_length, complete, context, interval);
923 {
924 usb_fill_int_urb(urb, usb, usb_rcvbulkpipe(usb, epnum),
925 transfer_buffer, buffer_length, complete, context, interval);
926 } 858 }
927 859
928 ret = usb_submit_urb(urb, GFP_ATOMIC); 860 ret = usb_submit_urb(urb, GFP_ATOMIC);
@@ -946,51 +878,48 @@ int zfLnxCencSendMsg(struct sock *netlink_sk, u_int8_t *msg, int len)
946 size = NLMSG_SPACE(len); 878 size = NLMSG_SPACE(len);
947 skb = alloc_skb(size, GFP_ATOMIC); 879 skb = alloc_skb(size, GFP_ATOMIC);
948 880
949 if(skb == NULL) 881 if (skb == NULL) {
950 {
951 printk("dev_alloc_skb failure \n"); 882 printk("dev_alloc_skb failure \n");
952 goto out; 883 goto out;
953 } 884 }
954 old_tail = skb->tail; 885 old_tail = skb->tail;
955 886
956 /*填写数据报相关信息*/ 887 /* */
957 nlh = NLMSG_PUT(skb, 0, 0, WAI_K_MSG, size-sizeof(*nlh)); 888 nlh = NLMSG_PUT(skb, 0, 0, WAI_K_MSG, size-sizeof(*nlh));
958 pos = NLMSG_DATA(nlh); 889 pos = NLMSG_DATA(nlh);
959 890
960 /*传输到用户空间的数据*/ 891 /* */
961 memcpy(pos, msg, len); 892 memcpy(pos, msg, len);
962 /*计算经过字节对其后的数据实际长度*/ 893 /* */
963 nlh->nlmsg_len = skb->tail - old_tail; 894 nlh->nlmsg_len = skb->tail - old_tail;
964 NETLINK_CB(skb).dst_group = COMMTYPE_GROUP; 895 NETLINK_CB(skb).dst_group = COMMTYPE_GROUP;
965 netlink_broadcast(netlink_sk, skb, 0, COMMTYPE_GROUP, GFP_ATOMIC); 896 netlink_broadcast(netlink_sk, skb, 0, COMMTYPE_GROUP, GFP_ATOMIC);
966 ret = 0; 897 ret = 0;
967out: 898out:
968 return ret; 899 return ret;
969nlmsg_failure: /*NLMSG_PUT 失败,则撤销套接字缓存*/ 900nlmsg_failure: /* */
970 kfree_skb(skb); 901 kfree_skb(skb);
971 goto out; 902 goto out;
972 903
973#undef COMMTYPE_GROUP 904#undef COMMTYPE_GROUP
974#undef WAI_K_MSG 905#undef WAI_K_MSG
975} 906}
976#endif //ZM_ENABLE_CENC 907#endif /*ZM_ENABLE_CENC*/
977 908
978/* Simply return 0xffff if VAP function is not supported */ 909/* Simply return 0xffff if VAP function is not supported */
979u16_t zfLnxGetVapId(zdev_t* dev) 910u16_t zfLnxGetVapId(zdev_t *dev)
980{ 911{
981 u16_t i; 912 u16_t i;
982 913
983 for (i=0; i<ZM_VAP_PORT_NUMBER; i++) 914 for (i = 0; i < ZM_VAP_PORT_NUMBER; i++) {
984 { 915 if (vap[i].dev == dev) {
985 if (vap[i].dev == dev) 916 return i;
986 { 917 }
987 return i; 918 }
988 } 919 return 0xffff;
989 }
990 return 0xffff;
991} 920}
992 921
993u32_t zfwReadReg(zdev_t* dev, u32_t offset) 922u32_t zfwReadReg(zdev_t *dev, u32_t offset)
994{ 923{
995 return 0; 924 return 0;
996} 925}
@@ -1012,25 +941,23 @@ u32_t smp_kevent_Lock = 0;
1012void kevent(struct work_struct *work) 941void kevent(struct work_struct *work)
1013{ 942{
1014 struct usbdrv_private *macp = 943 struct usbdrv_private *macp =
1015 container_of(work, struct usbdrv_private, kevent); 944 container_of(work, struct usbdrv_private, kevent);
1016 zdev_t *dev = macp->device; 945 zdev_t *dev = macp->device;
1017 946
1018 if (test_and_set_bit(0, (void *)&smp_kevent_Lock)) 947 if (test_and_set_bit(0, (void *)&smp_kevent_Lock)) {
1019 { 948 /*schedule_work(&macp->kevent);*/
1020 //schedule_work(&macp->kevent); 949 return;
1021 return;
1022 } 950 }
1023 951
1024 down(&macp->ioctl_sem); 952 down(&macp->ioctl_sem);
1025 953
1026 if (test_and_clear_bit(KEVENT_WATCHDOG, &macp->kevent_flags)) 954 if (test_and_clear_bit(KEVENT_WATCHDOG, &macp->kevent_flags)) {
1027 {
1028 extern u16_t zfHpStartRecv(zdev_t *dev); 955 extern u16_t zfHpStartRecv(zdev_t *dev);
1029 //zfiHwWatchDogReinit(dev); 956 /*zfiHwWatchDogReinit(dev);*/
1030 printk(("\n ************ Hw watchDog occur!! ************** \n")); 957 printk(("\n ************ Hw watchDog occur!! ************** \n"));
1031 zfiWlanSuspend(dev); 958 zfiWlanSuspend(dev);
1032 zfiWlanResume(dev,0); 959 zfiWlanResume(dev , 0);
1033 zfHpStartRecv(dev); 960 zfHpStartRecv(dev);
1034 } 961 }
1035 962
1036 clear_bit(0, (void *)&smp_kevent_Lock); 963 clear_bit(0, (void *)&smp_kevent_Lock);
@@ -1083,41 +1010,38 @@ void zfLnxSignalThread(zdev_t *dev, int flag)
1083{ 1010{
1084 struct usbdrv_private *macp = dev->ml_priv; 1011 struct usbdrv_private *macp = dev->ml_priv;
1085 1012
1086 if (macp == NULL) 1013 if (macp == NULL) {
1087 { 1014 printk("macp is NULL\n");
1088 printk("macp is NULL\n"); 1015 return;
1089 return;
1090 } 1016 }
1091 1017
1092 if (0 && macp->kevent_ready != 1) 1018 if (0 && macp->kevent_ready != 1) {
1093 { 1019 printk("Kevent not ready\n");
1094 printk("Kevent not ready\n"); 1020 return;
1095 return;
1096 } 1021 }
1097 1022
1098 set_bit(flag, &macp->kevent_flags); 1023 set_bit(flag, &macp->kevent_flags);
1099 1024
1100 if (!schedule_work(&macp->kevent)) 1025 if (!schedule_work(&macp->kevent)) {
1101 { 1026 /*Fails is Normal
1102 //Fails is Normal 1027 //printk(KERN_ERR "schedule_task failed, flag = %x\n", flag);*/
1103 //printk(KERN_ERR "schedule_task failed, flag = %x\n", flag); 1028 }
1104 }
1105} 1029}
1106 1030
1107/* Notify wrapper todo redownload firmware and reinit procedure when */ 1031/* Notify wrapper todo redownload firmware and reinit procedure when */
1108/* hardware watchdog occur : zfiHwWatchDogReinit() */ 1032/* hardware watchdog occur : zfiHwWatchDogReinit() */
1109void zfLnxWatchDogNotify(zdev_t* dev) 1033void zfLnxWatchDogNotify(zdev_t *dev)
1110{ 1034{
1111 zfLnxSignalThread(dev, KEVENT_WATCHDOG); 1035 zfLnxSignalThread(dev, KEVENT_WATCHDOG);
1112} 1036}
1113 1037
1114/* Query Durantion of Active Scan */ 1038/* Query Durantion of Active Scan */
1115void zfwGetActiveScanDur(zdev_t* dev, u8_t* Dur) 1039void zfwGetActiveScanDur(zdev_t *dev, u8_t *Dur)
1116{ 1040{
1117 *Dur = 30; // default 30 ms 1041 *Dur = 30; /* default 30 ms*/
1118} 1042}
1119 1043
1120void zfwGetShowZeroLengthSSID(zdev_t* dev, u8_t* Dur) 1044void zfwGetShowZeroLengthSSID(zdev_t *dev, u8_t *Dur)
1121{ 1045{
1122 *Dur = 0; 1046 *Dur = 0;
1123} 1047}