Magellan Linux

Contents of /trunk/zydas/patches/zd1211-driver-r32-monitor-mode.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (show annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years ago) by niro
File size: 12097 byte(s)
-import

1 * 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 *