Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (hide annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years, 1 month 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 *