Annotation of /trunk/zydas/patches/zd1211-driver-r32-monitor-mode.patch
Parent Directory | Revision Log
Revision 153 -
(hide annotations)
(download)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 12097 byte(s)
Tue May 8 20:52:56 2007 UTC (17 years, 4 months ago) by niro
File size: 12097 byte(s)
-import
1 | niro | 153 | * finding or making jordens@debian.org--zd1211/zd1211--integration--0--patch-1 |
2 | * finding or making jordens@debian.org--zd1211/zd1211--integration--0--patch-2 | ||
3 | * computing changeset | ||
4 | A/ {arch}/zd1211/zd1211--monitor-mode | ||
5 | A/ {arch}/zd1211/zd1211--monitor-mode/zd1211--monitor-mode--0 | ||
6 | A/ {arch}/zd1211/zd1211--monitor-mode/zd1211--monitor-mode--0/jordens@debian.org--zd1211 | ||
7 | A/ {arch}/zd1211/zd1211--monitor-mode/zd1211--monitor-mode--0/jordens@debian.org--zd1211/patch-log | ||
8 | A {arch}/zd1211/zd1211--integration/zd1211--integration--0/jordens@debian.org--zd1211/patch-log/patch-2 | ||
9 | A {arch}/zd1211/zd1211--monitor-mode/zd1211--monitor-mode--0/jordens@debian.org--zd1211/patch-log/base-0 | ||
10 | A {arch}/zd1211/zd1211--monitor-mode/zd1211--monitor-mode--0/jordens@debian.org--zd1211/patch-log/patch-1 | ||
11 | M src/zd1205.c | ||
12 | M src/zdapi.h | ||
13 | * changeset report | ||
14 | * modified files | ||
15 | |||
16 | --- orig/src/zd1205.c | ||
17 | +++ mod/src/zd1205.c | ||
18 | @@ -2526,6 +2526,7 @@ | ||
19 | u8 rx_offset = macp->rxOffset; | ||
20 | |||
21 | u8 FrameEndInd; | ||
22 | + u8 BaseFrmType = 0; | ||
23 | |||
24 | |||
25 | // Extension Info | ||
26 | @@ -2537,14 +2538,13 @@ | ||
27 | /* DA Index | SA Index | Rx Decrypt Type | Rx Status */ | ||
28 | /*****************************************************/ | ||
29 | |||
30 | - // Accept Data/Management frame only. | ||
31 | wla_hdr = (plcp_wla_Header_t *)&rfd->RxBuffer[macp->rxOffset]; | ||
32 | + BaseFrmType = BaseFrameType(wla_hdr); | ||
33 | frame_len = (le32_to_cpu(rfd->ActualCount) & 0x3fff) - rx_offset; | ||
34 | |||
35 | frame_len -= macp->rxOffset; | ||
36 | len1 = frame_len + macp->rxOffset; | ||
37 | len = frame_len + macp->rxOffset - EXTRA_INFO_LEN; | ||
38 | - PlcpRate = wla_hdr->PlcpHdr[0]; | ||
39 | |||
40 | if (frame_len == 0) | ||
41 | { | ||
42 | @@ -2570,9 +2570,13 @@ | ||
43 | { | ||
44 | macp->ErrToHostFrmCnt++; | ||
45 | return FALSE; | ||
46 | - } | ||
47 | |||
48 | - if (bWepBit(wla_hdr)) | ||
49 | + } else if (FrameEndInd & (BIT_1 | BIT_2 | BIT_4 | BIT_6)) | ||
50 | + { | ||
51 | + return false; | ||
52 | + } | ||
53 | + | ||
54 | + if ((BaseFrmType == DATA) && bWepBit(wla_hdr)) | ||
55 | { | ||
56 | //if (macp->cardSetting.EncryMode == ENCRY_TKIP) | ||
57 | // min_length = 48; | ||
58 | @@ -2605,86 +2609,94 @@ | ||
59 | return false; | ||
60 | } | ||
61 | |||
62 | - // Check if the SwRfd->frame_len matched the length derived from PLCP. | ||
63 | - bOfdmFrm = (FrameEndInd & BIT_0); | ||
64 | + if ((BaseFrmType == DATA) || (BaseFrmType == MANAGEMENT)) | ||
65 | + { | ||
66 | + // Check if the SwRfd->frame_len matched the length derived from PLCP. | ||
67 | + bOfdmFrm = (FrameEndInd & BIT_0); | ||
68 | + | ||
69 | + PlcpRate = wla_hdr->PlcpHdr[0]; | ||
70 | |||
71 | - if (bOfdmFrm) | ||
72 | - { | ||
73 | - // it's OFDM | ||
74 | - macp->rxOFDMDataFrame++; | ||
75 | + if (bOfdmFrm) | ||
76 | + { | ||
77 | + // it's OFDM | ||
78 | + macp->rxOFDMDataFrame++; | ||
79 | #ifdef HOST_IF_USB | ||
80 | |||
81 | - macp->PHYFreOFDMframe = 1; | ||
82 | + macp->PHYFreOFDMframe = 1; | ||
83 | #endif | ||
84 | |||
85 | - switch(PlcpRate & 0xF) { | ||
86 | - case 0x0B: //6M | ||
87 | + switch(PlcpRate & 0xF) { | ||
88 | + case 0x0B: //6M | ||
89 | |||
90 | - macp->rxInfo.rate = RATE_6M; | ||
91 | - break; | ||
92 | + macp->rxInfo.rate = RATE_6M; | ||
93 | + break; | ||
94 | |||
95 | - case 0x0F: //9M | ||
96 | - macp->rxInfo.rate = RATE_9M; | ||
97 | - break; | ||
98 | + case 0x0F: //9M | ||
99 | + macp->rxInfo.rate = RATE_9M; | ||
100 | + break; | ||
101 | |||
102 | |||
103 | - case 0x0A: //12M | ||
104 | - macp->rxInfo.rate = RATE_12M; | ||
105 | + case 0x0A: //12M | ||
106 | + macp->rxInfo.rate = RATE_12M; | ||
107 | |||
108 | - break; | ||
109 | + break; | ||
110 | |||
111 | - case 0x0E: //18M | ||
112 | - macp->rxInfo.rate = RATE_18M; | ||
113 | - break; | ||
114 | + case 0x0E: //18M | ||
115 | + macp->rxInfo.rate = RATE_18M; | ||
116 | + break; | ||
117 | |||
118 | |||
119 | - case 0x09: //24M | ||
120 | - macp->rxInfo.rate = RATE_24M; | ||
121 | - break; | ||
122 | + case 0x09: //24M | ||
123 | + macp->rxInfo.rate = RATE_24M; | ||
124 | + break; | ||
125 | |||
126 | - case 0x0D: //36M | ||
127 | - macp->rxInfo.rate = RATE_36M; | ||
128 | - break; | ||
129 | + case 0x0D: //36M | ||
130 | + macp->rxInfo.rate = RATE_36M; | ||
131 | + break; | ||
132 | |||
133 | - case 0x08: //48M | ||
134 | - macp->rxInfo.rate = RATE_48M; | ||
135 | - break; | ||
136 | + case 0x08: //48M | ||
137 | + macp->rxInfo.rate = RATE_48M; | ||
138 | + break; | ||
139 | |||
140 | - case 0x0C: //54M | ||
141 | - macp->rxInfo.rate = RATE_54M; | ||
142 | - break; | ||
143 | + case 0x0C: //54M | ||
144 | + macp->rxInfo.rate = RATE_54M; | ||
145 | + break; | ||
146 | |||
147 | - default: | ||
148 | - break; | ||
149 | - } | ||
150 | + default: | ||
151 | + break; | ||
152 | + } | ||
153 | |||
154 | - } else | ||
155 | - { | ||
156 | - // it's CCK | ||
157 | - macp->rx11bDataFrame++; | ||
158 | - // the value from PHY is in scale from Max is 0 and Min is 0xb5 | ||
159 | - switch(PlcpRate) { | ||
160 | - case 0x0A: | ||
161 | + } else | ||
162 | + { | ||
163 | + // it's CCK | ||
164 | + macp->rx11bDataFrame++; | ||
165 | + // the value from PHY is in scale from Max is 0 and Min is 0xb5 | ||
166 | + switch(PlcpRate) { | ||
167 | + case 0x0A: | ||
168 | |||
169 | - macp->rxInfo.rate = RATE_1M; | ||
170 | - break; | ||
171 | + macp->rxInfo.rate = RATE_1M; | ||
172 | + break; | ||
173 | |||
174 | - case 0x14: | ||
175 | - macp->rxInfo.rate = RATE_2M; | ||
176 | - break; | ||
177 | + case 0x14: | ||
178 | + macp->rxInfo.rate = RATE_2M; | ||
179 | + break; | ||
180 | |||
181 | - case 0x37: | ||
182 | - macp->rxInfo.rate = RATE_5M; | ||
183 | - break; | ||
184 | + case 0x37: | ||
185 | + macp->rxInfo.rate = RATE_5M; | ||
186 | + break; | ||
187 | |||
188 | - case 0x6E: | ||
189 | - macp->rxInfo.rate = RATE_11M; | ||
190 | - break; | ||
191 | + case 0x6E: | ||
192 | + macp->rxInfo.rate = RATE_11M; | ||
193 | + break; | ||
194 | |||
195 | - default: | ||
196 | - break; | ||
197 | - } | ||
198 | - } | ||
199 | + default: | ||
200 | + break; | ||
201 | + } | ||
202 | + } | ||
203 | + } else | ||
204 | + { | ||
205 | + macp->rxInfo.rate = RATE_1M; | ||
206 | + } | ||
207 | |||
208 | |||
209 | macp->rxSignalQuality = rfd->RxBuffer[len]; | ||
210 | @@ -3398,8 +3410,33 @@ | ||
211 | if (SubFrameType(wla_hdr) != BEACON) { | ||
212 | macp->bFrmRxed1 = 1; | ||
213 | } | ||
214 | + | ||
215 | + if (zd1205_validate_frame(macp, rfd) == false) { | ||
216 | + //int i; | ||
217 | + //int frame_len=(le32_to_cpu(rfd->ActualCount)&0x3fff)-macp->rxOffset; | ||
218 | + ZD1211DEBUG(4, "zd1211: invalid frame\n"); | ||
219 | + //plcp_wla_Header_t *wla_hdrb; | ||
220 | + //printk("zd1211: invalid frame\n"); | ||
221 | + //printk("\nAddr1: "); | ||
222 | + //for(i=0;i<6;i++) | ||
223 | + // printk("%02x ", wla_hdr->Address1[i]); | ||
224 | + //printk("\nAddr2: "); | ||
225 | + //for(i=0;i<6;i++) | ||
226 | + // printk("%02x ", wla_hdr->Address2[i]); | ||
227 | + //printk("\nAddr3: "); | ||
228 | + //for(i=0;i<6;i++) | ||
229 | + // printk("%02x ", wla_hdr->Address3[i]); | ||
230 | + //printk("\nDuration:%d",*(u16 *)wla_hdr->Duration); | ||
231 | + //printk("\nFrmCtl:%d",*(u16 *)wla_hdr->FrameCtrl); | ||
232 | + //printk("\nLength:%d\n",frame_len); | ||
233 | + | ||
234 | + | ||
235 | + macp->invalid_frame_good_crc ++; | ||
236 | + zd1205_add_skb_to_end(macp, rx_struct); | ||
237 | + continue; | ||
238 | + } | ||
239 | |||
240 | - if (!macp->sniffer_on) { | ||
241 | + if ((!macp->sniffer_on) && (BssType != IW_MODE_MONITOR)) { | ||
242 | BaseFrmType = BaseFrameType(wla_hdr); | ||
243 | |||
244 | if ((BaseFrmType == DATA) || (BaseFrmType == MANAGEMENT)) { //Data or Management Frames | ||
245 | @@ -3412,31 +3449,6 @@ | ||
246 | data_sz + macp->rfd_size, PCI_DMA_FROMDEVICE); | ||
247 | #endif | ||
248 | |||
249 | - if (zd1205_validate_frame(macp, rfd) == false) { | ||
250 | - //int i; | ||
251 | - //int frame_len=(le32_to_cpu(rfd->ActualCount)&0x3fff)-macp->rxOffset; | ||
252 | - ZD1211DEBUG(4, "zd1211: invalid frame\n"); | ||
253 | - //plcp_wla_Header_t *wla_hdrb; | ||
254 | - //printk("zd1211: invalid frame\n"); | ||
255 | - //printk("\nAddr1: "); | ||
256 | - //for(i=0;i<6;i++) | ||
257 | - // printk("%02x ", wla_hdr->Address1[i]); | ||
258 | - //printk("\nAddr2: "); | ||
259 | - //for(i=0;i<6;i++) | ||
260 | - // printk("%02x ", wla_hdr->Address2[i]); | ||
261 | - //printk("\nAddr3: "); | ||
262 | - //for(i=0;i<6;i++) | ||
263 | - // printk("%02x ", wla_hdr->Address3[i]); | ||
264 | - //printk("\nDuration:%d",*(u16 *)wla_hdr->Duration); | ||
265 | - //printk("\nFrmCtl:%d",*(u16 *)wla_hdr->FrameCtrl); | ||
266 | - //printk("\nLength:%d\n",frame_len); | ||
267 | - | ||
268 | - | ||
269 | - macp->invalid_frame_good_crc ++; | ||
270 | - zd1205_add_skb_to_end(macp, rx_struct); | ||
271 | - continue; | ||
272 | - } | ||
273 | - | ||
274 | seq = getSeq(wla_hdr); | ||
275 | frag = getFrag(wla_hdr); | ||
276 | pTa = getTA(wla_hdr); | ||
277 | @@ -3767,7 +3779,7 @@ | ||
278 | |||
279 | defrag_comp: | ||
280 | rfd_cnt++; | ||
281 | - if (!macp->sniffer_on) { | ||
282 | + if ((!macp->sniffer_on) && (BssType != IW_MODE_MONITOR)) { | ||
283 | if (BaseFrmType == DATA) | ||
284 | macp->TotalRxDataFrmBytes += (hdrLen+bodyLen); | ||
285 | |||
286 | @@ -3796,7 +3808,7 @@ | ||
287 | skb_put(skb, data_sz - PLCP_HEADER); | ||
288 | skb->mac.raw = skb->data; | ||
289 | skb->pkt_type = PACKET_OTHERHOST; | ||
290 | - skb->protocol = htons(ETH_P_802_2); | ||
291 | + skb->protocol = __constant_htons(ETH_P_802_2); | ||
292 | skb->dev = dev; | ||
293 | skb->ip_summed = CHECKSUM_NONE; | ||
294 | netif_rx(skb); | ||
295 | @@ -4431,6 +4443,37 @@ | ||
296 | } | ||
297 | |||
298 | |||
299 | +void | ||
300 | +zd1205_monitor_mode_enable(struct zd1205_private *macp) | ||
301 | +{ | ||
302 | + struct net_device *dev = macp->device; | ||
303 | + | ||
304 | + if (netif_running(dev)) | ||
305 | + netif_stop_queue(dev); | ||
306 | + | ||
307 | + dev->type = ARPHRD_IEEE80211; | ||
308 | + zd_writel(0x01, SnifferOn); | ||
309 | + /* zd_writel(ALL_KNOWN_RX_FILTER, Rx_Filter); */ | ||
310 | + zd_writel(0xffffffff, Rx_Filter); | ||
311 | + zd_writel(0x08, EncryType); | ||
312 | + macp->intrMask = RX_COMPLETE_EN; | ||
313 | +} | ||
314 | + | ||
315 | +void | ||
316 | +zd1205_monitor_mode_disable(struct zd1205_private *macp) | ||
317 | +{ | ||
318 | + struct net_device *dev = macp->device; | ||
319 | + | ||
320 | + dev->type = ARPHRD_ETHER; | ||
321 | + zd_writel(0x00, SnifferOn); | ||
322 | + //zd_writel(0x00000000, Rx_Filter); /* will be set for the new mode */ | ||
323 | + zd_writel(NO_WEP, EncryType); | ||
324 | + macp->intrMask = ZD1205_INT_MASK; | ||
325 | + | ||
326 | + if (!netif_running(dev)) | ||
327 | + netif_start_queue(dev); | ||
328 | +} | ||
329 | + | ||
330 | |||
331 | void | ||
332 | zd1205_isolate_driver(struct zd1205_private *macp) | ||
333 | @@ -6120,6 +6163,10 @@ | ||
334 | struct zd1205_private *macp = dev->priv; | ||
335 | |||
336 | zd1205_lock(macp); | ||
337 | + | ||
338 | + if (macp->cardSetting.BssType == IW_MODE_MONITOR) | ||
339 | + zd1205_monitor_mode_disable(macp); | ||
340 | + | ||
341 | switch(*mode) | ||
342 | { | ||
343 | case IW_MODE_ADHOC: | ||
344 | @@ -6168,6 +6215,12 @@ | ||
345 | netif_start_queue(dev); | ||
346 | break; | ||
347 | |||
348 | + case IW_MODE_MONITOR: | ||
349 | + ZD1211DEBUG(0, "Switch to Monitor mode\n"); | ||
350 | + macp->cardSetting.BssType = IW_MODE_MONITOR; | ||
351 | + zd1205_monitor_mode_enable(macp); | ||
352 | + break; | ||
353 | + | ||
354 | default: | ||
355 | ZD1211DEBUG(0, "Switch to PSEUDO_IBSS mode\n"); | ||
356 | macp->cardSetting.BssType = PSEUDO_IBSS; | ||
357 | @@ -6242,6 +6295,10 @@ | ||
358 | case INDEPENDENT_BSS: | ||
359 | *mode = IW_MODE_ADHOC; | ||
360 | break; | ||
361 | + | ||
362 | + case IW_MODE_MONITOR: | ||
363 | + *mode = IW_MODE_MONITOR; | ||
364 | + break; | ||
365 | |||
366 | default: | ||
367 | *mode = IW_MODE_ADHOC; | ||
368 | |||
369 | |||
370 | --- orig/src/zdapi.h | ||
371 | +++ mod/src/zdapi.h | ||
372 | @@ -210,8 +210,32 @@ | ||
373 | #define AP_BSS 0x4 | ||
374 | |||
375 | //RxFilter | ||
376 | + | ||
377 | +/* | ||
378 | + * Rx_Filter bits: | ||
379 | + * | ||
380 | + * 0: Assoc req | ||
381 | + * 1: Assoc resp | ||
382 | + * 2: Reassoc req | ||
383 | + * 3: Reassoc resp | ||
384 | + * 4: Probe req | ||
385 | + * 5: Probe resp | ||
386 | + * 8: Beacon | ||
387 | + * 9: ATIM | ||
388 | + * 10: Disassoc | ||
389 | + * 11: Auth | ||
390 | + * 12: Deauth | ||
391 | + * 26: PS-Poll | ||
392 | + * 27: RTS | ||
393 | + * 28: CTS | ||
394 | + * 29: ACK | ||
395 | + * 30: CF-End | ||
396 | + * 31: CF-End + CF-Ack | ||
397 | +*/ | ||
398 | + | ||
399 | #define AP_RX_FILTER 0x0400feff | ||
400 | #define STA_RX_FILTER 0x0000ffff | ||
401 | +#define ALL_KNOWN_RX_FILTER 0xfc001f3f | ||
402 | |||
403 | //pSetting->MacMode | ||
404 | #define MIXED_MODE 0x01 | ||
405 | |||
406 | |||
407 | |||
408 | * added files | ||
409 | |||
410 |
Properties
Name | Value |
---|---|
svn:executable | * |