1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37#include "../rt_config.h"
38
39
40#define BG_BAND_REGION_0_START 0
41#define BG_BAND_REGION_0_SIZE 11
42#define BG_BAND_REGION_1_START 0
43#define BG_BAND_REGION_1_SIZE 13
44#define BG_BAND_REGION_2_START 9
45#define BG_BAND_REGION_2_SIZE 2
46#define BG_BAND_REGION_3_START 9
47#define BG_BAND_REGION_3_SIZE 4
48#define BG_BAND_REGION_4_START 13
49#define BG_BAND_REGION_4_SIZE 1
50#define BG_BAND_REGION_5_START 0
51#define BG_BAND_REGION_5_SIZE 14
52#define BG_BAND_REGION_6_START 2
53#define BG_BAND_REGION_6_SIZE 7
54#define BG_BAND_REGION_7_START 4
55#define BG_BAND_REGION_7_SIZE 9
56#define BG_BAND_REGION_31_START 0
57#define BG_BAND_REGION_31_SIZE 14
58
59
60UCHAR A_BAND_REGION_0_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165};
61UCHAR A_BAND_REGION_1_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140};
62UCHAR A_BAND_REGION_2_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64};
63UCHAR A_BAND_REGION_3_CHANNEL_LIST[]={52, 56, 60, 64, 149, 153, 157, 161};
64UCHAR A_BAND_REGION_4_CHANNEL_LIST[]={149, 153, 157, 161, 165};
65UCHAR A_BAND_REGION_5_CHANNEL_LIST[]={149, 153, 157, 161};
66UCHAR A_BAND_REGION_6_CHANNEL_LIST[]={36, 40, 44, 48};
67UCHAR A_BAND_REGION_7_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165};
68UCHAR A_BAND_REGION_8_CHANNEL_LIST[]={52, 56, 60, 64};
69UCHAR A_BAND_REGION_9_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165};
70UCHAR A_BAND_REGION_10_CHANNEL_LIST[]={36, 40, 44, 48, 149, 153, 157, 161, 165};
71UCHAR A_BAND_REGION_11_CHANNEL_LIST[]={36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 149, 153, 157, 161};
72
73
74UCHAR BaSizeArray[4] = {8,16,32,64};
75
76
77
78
79
80
81
82
83
84
85
86
87
88VOID BuildChannelList(
89 IN PRTMP_ADAPTER pAd)
90{
91 UCHAR i, j, index=0, num=0;
92 PUCHAR pChannelList = NULL;
93
94 NdisZeroMemory(pAd->ChannelList, MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER));
95
96
97 if ((pAd->CommonCfg.PhyMode != PHY_11A)
98 && (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) && (pAd->CommonCfg.PhyMode != PHY_11N_5G)
99 )
100 {
101 switch (pAd->CommonCfg.CountryRegion & 0x7f)
102 {
103 case REGION_0_BG_BAND:
104 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_0_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_0_SIZE);
105 index += BG_BAND_REGION_0_SIZE;
106 break;
107 case REGION_1_BG_BAND:
108 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_1_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_1_SIZE);
109 index += BG_BAND_REGION_1_SIZE;
110 break;
111 case REGION_2_BG_BAND:
112 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_2_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_2_SIZE);
113 index += BG_BAND_REGION_2_SIZE;
114 break;
115 case REGION_3_BG_BAND:
116 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_3_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_3_SIZE);
117 index += BG_BAND_REGION_3_SIZE;
118 break;
119 case REGION_4_BG_BAND:
120 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_4_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_4_SIZE);
121 index += BG_BAND_REGION_4_SIZE;
122 break;
123 case REGION_5_BG_BAND:
124 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_5_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_5_SIZE);
125 index += BG_BAND_REGION_5_SIZE;
126 break;
127 case REGION_6_BG_BAND:
128 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_6_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_6_SIZE);
129 index += BG_BAND_REGION_6_SIZE;
130 break;
131 case REGION_7_BG_BAND:
132 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_7_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_7_SIZE);
133 index += BG_BAND_REGION_7_SIZE;
134 break;
135 case REGION_31_BG_BAND:
136 NdisMoveMemory(&pAd->ChannelList[index], &pAd->TxPower[BG_BAND_REGION_31_START], sizeof(CHANNEL_TX_POWER) * BG_BAND_REGION_31_SIZE);
137 index += BG_BAND_REGION_31_SIZE;
138 break;
139 default:
140 break;
141 }
142 for (i=0; i<index; i++)
143 pAd->ChannelList[i].MaxTxPwr = 20;
144 }
145
146 if ((pAd->CommonCfg.PhyMode == PHY_11A) || (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED)
147 || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED)
148 || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11N_5G)
149 )
150 {
151 switch (pAd->CommonCfg.CountryRegionForABand & 0x7f)
152 {
153 case REGION_0_A_BAND:
154 num = sizeof(A_BAND_REGION_0_CHANNEL_LIST)/sizeof(UCHAR);
155 pChannelList = A_BAND_REGION_0_CHANNEL_LIST;
156 break;
157 case REGION_1_A_BAND:
158 num = sizeof(A_BAND_REGION_1_CHANNEL_LIST)/sizeof(UCHAR);
159 pChannelList = A_BAND_REGION_1_CHANNEL_LIST;
160 break;
161 case REGION_2_A_BAND:
162 num = sizeof(A_BAND_REGION_2_CHANNEL_LIST)/sizeof(UCHAR);
163 pChannelList = A_BAND_REGION_2_CHANNEL_LIST;
164 break;
165 case REGION_3_A_BAND:
166 num = sizeof(A_BAND_REGION_3_CHANNEL_LIST)/sizeof(UCHAR);
167 pChannelList = A_BAND_REGION_3_CHANNEL_LIST;
168 break;
169 case REGION_4_A_BAND:
170 num = sizeof(A_BAND_REGION_4_CHANNEL_LIST)/sizeof(UCHAR);
171 pChannelList = A_BAND_REGION_4_CHANNEL_LIST;
172 break;
173 case REGION_5_A_BAND:
174 num = sizeof(A_BAND_REGION_5_CHANNEL_LIST)/sizeof(UCHAR);
175 pChannelList = A_BAND_REGION_5_CHANNEL_LIST;
176 break;
177 case REGION_6_A_BAND:
178 num = sizeof(A_BAND_REGION_6_CHANNEL_LIST)/sizeof(UCHAR);
179 pChannelList = A_BAND_REGION_6_CHANNEL_LIST;
180 break;
181 case REGION_7_A_BAND:
182 num = sizeof(A_BAND_REGION_7_CHANNEL_LIST)/sizeof(UCHAR);
183 pChannelList = A_BAND_REGION_7_CHANNEL_LIST;
184 break;
185 case REGION_8_A_BAND:
186 num = sizeof(A_BAND_REGION_8_CHANNEL_LIST)/sizeof(UCHAR);
187 pChannelList = A_BAND_REGION_8_CHANNEL_LIST;
188 break;
189 case REGION_9_A_BAND:
190 num = sizeof(A_BAND_REGION_9_CHANNEL_LIST)/sizeof(UCHAR);
191 pChannelList = A_BAND_REGION_9_CHANNEL_LIST;
192 break;
193
194 case REGION_10_A_BAND:
195 num = sizeof(A_BAND_REGION_10_CHANNEL_LIST)/sizeof(UCHAR);
196 pChannelList = A_BAND_REGION_10_CHANNEL_LIST;
197 break;
198
199 case REGION_11_A_BAND:
200 num = sizeof(A_BAND_REGION_11_CHANNEL_LIST)/sizeof(UCHAR);
201 pChannelList = A_BAND_REGION_11_CHANNEL_LIST;
202 break;
203
204 default:
205 DBGPRINT(RT_DEBUG_WARN,("countryregion=%d not support", pAd->CommonCfg.CountryRegionForABand));
206 break;
207 }
208
209 if (num != 0)
210 {
211 UCHAR RadarCh[15]={52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140};
212 for (i=0; i<num; i++)
213 {
214 for (j=0; j<MAX_NUM_OF_CHANNELS; j++)
215 {
216 if (pChannelList[i] == pAd->TxPower[j].Channel)
217 NdisMoveMemory(&pAd->ChannelList[index+i], &pAd->TxPower[j], sizeof(CHANNEL_TX_POWER));
218 }
219 for (j=0; j<15; j++)
220 {
221 if (pChannelList[i] == RadarCh[j])
222 pAd->ChannelList[index+i].DfsReq = TRUE;
223 }
224 pAd->ChannelList[index+i].MaxTxPwr = 20;
225 }
226 index += num;
227 }
228 }
229
230 pAd->ChannelListNum = index;
231 DBGPRINT(RT_DEBUG_TRACE,("country code=%d/%d, RFIC=%d, PHY mode=%d, support %d channels\n",
232 pAd->CommonCfg.CountryRegion, pAd->CommonCfg.CountryRegionForABand, pAd->RfIcType, pAd->CommonCfg.PhyMode, pAd->ChannelListNum));
233#ifdef DBG
234 for (i=0;i<pAd->ChannelListNum;i++)
235 {
236 DBGPRINT_RAW(RT_DEBUG_TRACE,("BuildChannel # %d :: Pwr0 = %d, Pwr1 =%d, \n ", pAd->ChannelList[i].Channel, pAd->ChannelList[i].Power, pAd->ChannelList[i].Power2));
237 }
238#endif
239}
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254UCHAR FirstChannel(
255 IN PRTMP_ADAPTER pAd)
256{
257 return pAd->ChannelList[0].Channel;
258}
259
260
261
262
263
264
265
266
267
268
269
270
271UCHAR NextChannel(
272 IN PRTMP_ADAPTER pAd,
273 IN UCHAR channel)
274{
275 int i;
276 UCHAR next_channel = 0;
277
278 for (i = 0; i < (pAd->ChannelListNum - 1); i++)
279 if (channel == pAd->ChannelList[i].Channel)
280 {
281 next_channel = pAd->ChannelList[i+1].Channel;
282 break;
283 }
284 return next_channel;
285}
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307VOID ChangeToCellPowerLimit(
308 IN PRTMP_ADAPTER pAd,
309 IN UCHAR AironetCellPowerLimit)
310{
311
312
313 if (AironetCellPowerLimit == 0xFF)
314 return;
315
316 if (AironetCellPowerLimit < 6)
317 pAd->CommonCfg.TxPowerPercentage = 6;
318 else if (AironetCellPowerLimit < 9)
319 pAd->CommonCfg.TxPowerPercentage = 10;
320 else if (AironetCellPowerLimit < 12)
321 pAd->CommonCfg.TxPowerPercentage = 25;
322 else if (AironetCellPowerLimit < 14)
323 pAd->CommonCfg.TxPowerPercentage = 50;
324 else if (AironetCellPowerLimit < 15)
325 pAd->CommonCfg.TxPowerPercentage = 75;
326 else
327 pAd->CommonCfg.TxPowerPercentage = 100;
328
329 if (pAd->CommonCfg.TxPowerPercentage > pAd->CommonCfg.TxPowerDefault)
330 pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault;
331
332}
333
334CHAR ConvertToRssi(
335 IN PRTMP_ADAPTER pAd,
336 IN CHAR Rssi,
337 IN UCHAR RssiNumber)
338{
339 UCHAR RssiOffset, LNAGain;
340
341
342 if (Rssi == 0)
343 return -99;
344
345 LNAGain = GET_LNA_GAIN(pAd);
346 if (pAd->LatchRfRegs.Channel > 14)
347 {
348 if (RssiNumber == 0)
349 RssiOffset = pAd->ARssiOffset0;
350 else if (RssiNumber == 1)
351 RssiOffset = pAd->ARssiOffset1;
352 else
353 RssiOffset = pAd->ARssiOffset2;
354 }
355 else
356 {
357 if (RssiNumber == 0)
358 RssiOffset = pAd->BGRssiOffset0;
359 else if (RssiNumber == 1)
360 RssiOffset = pAd->BGRssiOffset1;
361 else
362 RssiOffset = pAd->BGRssiOffset2;
363 }
364
365 return (-12 - RssiOffset - LNAGain - Rssi);
366}
367
368
369
370
371
372
373
374VOID ScanNextChannel(
375 IN PRTMP_ADAPTER pAd)
376{
377 HEADER_802_11 Hdr80211;
378 PUCHAR pOutBuffer = NULL;
379 NDIS_STATUS NStatus;
380 ULONG FrameLen = 0;
381 UCHAR SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0;
382 USHORT Status;
383 PHEADER_802_11 pHdr80211;
384 UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME;
385
386 if (MONITOR_ON(pAd))
387 return;
388
389 if (pAd->MlmeAux.Channel == 0)
390 {
391 if ((pAd->CommonCfg.BBPCurrentBW == BW_40)
392 && (INFRA_ON(pAd)
393 || (pAd->OpMode == OPMODE_AP))
394 )
395 {
396 AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
397 AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
398 RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
399 BBPValue &= (~0x18);
400 BBPValue |= 0x10;
401 RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
402 DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n",pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr));
403 }
404 else
405 {
406 AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
407 AsicLockChannel(pAd, pAd->CommonCfg.Channel);
408 DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr));
409 }
410
411 {
412
413
414
415
416
417 if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && (INFRA_ON(pAd)))
418 {
419 NStatus = MlmeAllocateMemory(pAd, (PVOID)&pOutBuffer);
420 if (NStatus == NDIS_STATUS_SUCCESS)
421 {
422 pHdr80211 = (PHEADER_802_11) pOutBuffer;
423 MgtMacHeaderInit(pAd, pHdr80211, SUBTYPE_NULL_FUNC, 1, pAd->CommonCfg.Bssid, pAd->CommonCfg.Bssid);
424 pHdr80211->Duration = 0;
425 pHdr80211->FC.Type = BTYPE_DATA;
426 pHdr80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE);
427
428
429 MiniportMMRequest(pAd, 0, pOutBuffer, sizeof(HEADER_802_11));
430 DBGPRINT(RT_DEBUG_TRACE, ("MlmeScanReqAction -- Send PSM Data frame\n"));
431 MlmeFreeMemory(pAd, pOutBuffer);
432 RTMPusecDelay(5000);
433 }
434 }
435
436 pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
437 Status = MLME_SUCCESS;
438 MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status);
439 }
440
441 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
442 }
443#ifdef RT2870
444 else if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->OpMode == OPMODE_STA))
445 {
446 pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
447 MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_FAIL_NO_RESOURCE);
448 }
449#endif
450 else
451 {
452 {
453
454 if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
455#ifdef RT2860
456 AsicForceWakeup(pAd, FROM_TX);
457#endif
458#ifdef RT2870
459 AsicForceWakeup(pAd, TRUE);
460#endif
461
462 if (pAd->StaCfg.Psm == PWR_SAVE)
463 MlmeSetPsmBit(pAd, PWR_ACTIVE);
464 }
465
466 AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, TRUE);
467 AsicLockChannel(pAd, pAd->MlmeAux.Channel);
468
469 {
470 if (pAd->MlmeAux.Channel > 14)
471 {
472 if ((pAd->CommonCfg.bIEEE80211H == 1) && RadarChannelCheck(pAd, pAd->MlmeAux.Channel))
473 {
474 ScanType = SCAN_PASSIVE;
475 ScanTimeIn5gChannel = MIN_CHANNEL_TIME;
476 }
477 }
478 }
479
480
481 if ((pAd->MlmeAux.Channel <= 14) && (pAd->MlmeAux.Channel >= 12) && ((pAd->CommonCfg.CountryRegion & 0x7f) == REGION_31_BG_BAND))
482 {
483 ScanType = SCAN_PASSIVE;
484 }
485
486
487
488 if (ScanType == FAST_SCAN_ACTIVE)
489 RTMPSetTimer(&pAd->MlmeAux.ScanTimer, FAST_ACTIVE_SCAN_TIME);
490 else if (((ScanType == SCAN_CISCO_ACTIVE) ||
491 (ScanType == SCAN_CISCO_PASSIVE) ||
492 (ScanType == SCAN_CISCO_CHANNEL_LOAD) ||
493 (ScanType == SCAN_CISCO_NOISE)) && (pAd->OpMode == OPMODE_STA))
494 {
495 if (pAd->StaCfg.CCXScanTime < 25)
496 RTMPSetTimer(&pAd->MlmeAux.ScanTimer, pAd->StaCfg.CCXScanTime * 2);
497 else
498 RTMPSetTimer(&pAd->MlmeAux.ScanTimer, pAd->StaCfg.CCXScanTime);
499 }
500 else
501 {
502 if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED)
503 || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED)
504 )
505 {
506 if (pAd->MlmeAux.Channel > 14)
507 RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ScanTimeIn5gChannel);
508 else
509 RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MIN_CHANNEL_TIME);
510 }
511 else
512 RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MAX_CHANNEL_TIME);
513 }
514
515 if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE) ||
516 (ScanType == SCAN_CISCO_ACTIVE))
517 {
518 NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);
519 if (NStatus != NDIS_STATUS_SUCCESS)
520 {
521 DBGPRINT(RT_DEBUG_TRACE, ("SYNC - ScanNextChannel() allocate memory fail\n"));
522
523 {
524 pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
525 Status = MLME_FAIL_NO_RESOURCE;
526 MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status);
527 }
528
529 return;
530 }
531
532
533 if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE)
534 )
535 SsidLen = pAd->MlmeAux.SsidLen;
536 else
537 SsidLen = 0;
538
539 MgtMacHeaderInit(pAd, &Hdr80211, SUBTYPE_PROBE_REQ, 0, BROADCAST_ADDR, BROADCAST_ADDR);
540 MakeOutgoingFrame(pOutBuffer, &FrameLen,
541 sizeof(HEADER_802_11), &Hdr80211,
542 1, &SsidIe,
543 1, &SsidLen,
544 SsidLen, pAd->MlmeAux.Ssid,
545 1, &SupRateIe,
546 1, &pAd->CommonCfg.SupRateLen,
547 pAd->CommonCfg.SupRateLen, pAd->CommonCfg.SupRate,
548 END_OF_ARGS);
549
550 if (pAd->CommonCfg.ExtRateLen)
551 {
552 ULONG Tmp;
553 MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
554 1, &ExtRateIe,
555 1, &pAd->CommonCfg.ExtRateLen,
556 pAd->CommonCfg.ExtRateLen, pAd->CommonCfg.ExtRate,
557 END_OF_ARGS);
558 FrameLen += Tmp;
559 }
560
561 if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
562 {
563 ULONG Tmp;
564 UCHAR HtLen;
565 UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33};
566
567 if (pAd->bBroadComHT == TRUE)
568 {
569 HtLen = pAd->MlmeAux.HtCapabilityLen + 4;
570
571 MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
572 1, &WpaIe,
573 1, &HtLen,
574 4, &BROADCOM[0],
575 pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability,
576 END_OF_ARGS);
577 }
578 else
579 {
580 HtLen = pAd->MlmeAux.HtCapabilityLen;
581
582 MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
583 1, &HtCapIe,
584 1, &HtLen,
585 HtLen, &pAd->CommonCfg.HtCapability,
586 END_OF_ARGS);
587 }
588 FrameLen += Tmp;
589 }
590
591 MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
592 MlmeFreeMemory(pAd, pOutBuffer);
593 }
594
595
596
597 pAd->Mlme.SyncMachine.CurrState = SCAN_LISTEN;
598 }
599}
600
601VOID MgtProbReqMacHeaderInit(
602 IN PRTMP_ADAPTER pAd,
603 IN OUT PHEADER_802_11 pHdr80211,
604 IN UCHAR SubType,
605 IN UCHAR ToDs,
606 IN PUCHAR pDA,
607 IN PUCHAR pBssid)
608{
609 NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11));
610
611 pHdr80211->FC.Type = BTYPE_MGMT;
612 pHdr80211->FC.SubType = SubType;
613 if (SubType == SUBTYPE_ACK)
614 pHdr80211->FC.Type = BTYPE_CNTL;
615 pHdr80211->FC.ToDs = ToDs;
616 COPY_MAC_ADDR(pHdr80211->Addr1, pDA);
617 COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress);
618 COPY_MAC_ADDR(pHdr80211->Addr3, pBssid);
619}
620
621
622