diff options
-rw-r--r-- | drivers/staging/otus/wwrap.c | 968 |
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 | ||
32 | extern void zfiRecv80211(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo); | 32 | extern void zfiRecv80211(zdev_t *dev, zbuf_t *buf, struct zsAdditionInfo *addInfo); |
33 | extern void zfCoreRecv(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo); | 33 | extern void zfCoreRecv(zdev_t *dev, zbuf_t *buf, struct zsAdditionInfo *addInfo); |
34 | extern void zfIdlChkRsp(zdev_t* dev, u32_t* rsp, u16_t rspLen); | 34 | extern void zfIdlChkRsp(zdev_t *dev, u32_t *rsp, u16_t rspLen); |
35 | extern void zfIdlRsp(zdev_t* dev, u32_t *rsp, u16_t rspLen); | 35 | extern 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];*/ |
40 | extern struct zsVapStruct vap[ZM_VAP_PORT_NUMBER]; | 40 | extern struct zsVapStruct vap[ZM_VAP_PORT_NUMBER]; |
41 | 41 | ||
42 | u32_t zfLnxUsbSubmitTxData(zdev_t* dev); | 42 | u32_t zfLnxUsbSubmitTxData(zdev_t *dev); |
43 | u32_t zfLnxUsbIn(zdev_t* dev, urb_t *urb, zbuf_t *buf); | 43 | u32_t zfLnxUsbIn(zdev_t *dev, urb_t *urb, zbuf_t *buf); |
44 | u32_t zfLnxSubmitRegInUrb(zdev_t *dev); | 44 | u32_t zfLnxSubmitRegInUrb(zdev_t *dev); |
45 | u32_t zfLnxUsbSubmitBulkUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, | 45 | u32_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); |
47 | u32_t zfLnxUsbSubmitIntUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, | 47 | u32_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 | ||
51 | u16_t zfLnxGetFreeTxUrb(zdev_t *dev) | 51 | u16_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 | ||
152 | u16_t zfLnxPutUsbTxBuffer(zdev_t *dev, u8_t *hdr, u16_t hdrlen, | 142 | u16_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, | |||
197 | zbuf_t *zfLnxGetUsbRxBuffer(zdev_t *dev) | 184 | zbuf_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 | ||
256 | void zfLnxUsbDataOut_callback(urb_t *urb) | 237 | void 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 | ||
282 | void zfLnxUsbDataIn_callback(urb_t *urb) | 261 | void 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 | ||
509 | void zfLnxUsbRegOut_callback(urb_t *urb) | 473 | void 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 | ||
516 | void zfLnxUsbRegIn_callback(urb_t *urb) | 480 | void 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 | ||
582 | u32_t zfLnxUsbSubmitTxData(zdev_t* dev) | 543 | u32_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 | ||
764 | u32_t zfLnxUsbIn(zdev_t* dev, urb_t *urb, zbuf_t *buf) | 708 | u32_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 | ||
780 | u32_t zfLnxUsbWriteReg(zdev_t* dev, u32_t* cmd, u16_t cmdLen) | 724 | u32_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 | ||
804 | u32_t zfLnxUsbOut(zdev_t* dev, u8_t *hdr, u16_t hdrlen, u8_t *snap, u16_t snapLen, | 748 | u32_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 | ||
829 | void zfLnxInitUsbTxQ(zdev_t* dev) | 772 | void 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 | ||
845 | void zfLnxInitUsbRxQ(zdev_t* dev) | 788 | void 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 | ||
876 | u32_t zfLnxUsbSubmitBulkUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, | 817 | u32_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 | ||
911 | u32_t zfLnxUsbSubmitIntUrb(urb_t *urb, struct usb_device *usb, u16_t epnum, u16_t direction, | 846 | u32_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; |
967 | out: | 898 | out: |
968 | return ret; | 899 | return ret; |
969 | nlmsg_failure: /*NLMSG_PUT 失败,则撤销套接字缓存*/ | 900 | nlmsg_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 */ |
979 | u16_t zfLnxGetVapId(zdev_t* dev) | 910 | u16_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 | ||
993 | u32_t zfwReadReg(zdev_t* dev, u32_t offset) | 922 | u32_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; | |||
1012 | void kevent(struct work_struct *work) | 941 | void 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() */ |
1109 | void zfLnxWatchDogNotify(zdev_t* dev) | 1033 | void 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 */ |
1115 | void zfwGetActiveScanDur(zdev_t* dev, u8_t* Dur) | 1039 | void 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 | ||
1120 | void zfwGetShowZeroLengthSSID(zdev_t* dev, u8_t* Dur) | 1044 | void zfwGetShowZeroLengthSSID(zdev_t *dev, u8_t *Dur) |
1121 | { | 1045 | { |
1122 | *Dur = 0; | 1046 | *Dur = 0; |
1123 | } | 1047 | } |